Re: [問題] 如何取空白可畫圖的大小?

看板MacDev作者 (zonble)時間13年前 (2010/12/28 04:13), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串9/11 (看更多)
: 推 dm4:請問一下 zonble 大,文中的這個 scrollView 如果放在 12/26 15:32 : → dm4:viewDidLoad 的時候再 add 會有什麼差別嗎? 12/26 15:32 整個解釋一遍好了。UIViewController 與其所屬的 view 之間 的關係,是所謂的 Lazy Loading-在 UIViewController 經過 alloc、init 之後,並不會馬上產生 view 這個物件,而是第一 次呼叫到 view,才去產生 view。根據 UIViewController 所表 現的行為,我們可以知道,蘋果的實作大概是這樣: @implementation UIViewController .... - (UIView *)view { if (!_view) { [self loadView]; if (_view) { [self viewDidLoad]; } } return _view; } - (void)setView:(UIView *)inView { [_view release]; _view = [inView retain]; if (!_view) { [self viewDidUnload]; } } 我們有兩種不同的方式載入 view,一種是透過 nib 載入,另外 一種則是用程式產生。官方文件的規範是,如果你要載入 nib, 就不要改寫 loadView,讓 UIViewController 原本實作的 loadView 載入 nib,而你對 nib 載入的 view 還想做什麼事情,就寫在 viewDidLoad 裡頭。 而如果要自己用程式產生 self.view,那麼,官方就要求你改寫 loadView,而且不要呼叫 [super loadView]。實際上,如果沒有 nib, 卻呼叫了 [super loadView],還是會給你一個空白的 view;會動, 但是不好-因為根本就不需要載入 nib,呼叫 super,卻會讓程式 走到看看有沒有 nib 要載入那段,其實是多此一舉。這時候寫在 loadView 與 viewDidLoad 的差別不大。 有件事情很重要:什麼時候要去 release scrollView。由於 UIViewController 不只是在 dealloc 的時候會去 release view, 而是在收到記憶體不足警告的時候,不在前景的 view controller, 都會把 view 放掉,而當這個 view controller 回到前景時,再 透過 Lazy Loading,重新產生 view 物件。所以,像 scrollView 這種會在 loadView 產生的物件,不但要在 view controller dealloc 的時候 release,在 viewDidUnload 的時候也要 release,以避免 因為記憶體警告發生時,重複在 loadView 中產生新的 scrollView, 而造成 memory leak。 -- zonble.net cocoa.zonble.net -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.182.144

12/28 12:16, , 1F
感謝 zonble 大!
12/28 12:16, 1F

12/28 14:26, , 2F
好文章..推!!
12/28 14:26, 2F

12/29 18:14, , 3F
原來如此!
12/29 18:14, 3F
文章代碼(AID): #1D6FDXw4 (MacDev)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 9 之 11 篇):
文章代碼(AID): #1D6FDXw4 (MacDev)