Re: [問題] 如何取空白可畫圖的大小?
: 推 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
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 9 之 11 篇):