2011-02-22 53 views
1

當我將它們作爲保留它們的實例變量引用時,我應該在viewDidUnload中釋放UIView的子視圖嗎?我以編程方式構建了GUI。我應該這樣做嗎?由於uiview和ivars都保留,所以這些對象將有2個保留計數,當視圖接收到例如記憶警告然後UIView將釋放子視圖,但他們仍然有+1保留計數,所以我必須setself.myIvar = nil;在viewDidUnload中?我應該在viewDidUnload中發佈UIView的子視圖嗎?

謝謝你的時間。

+2

我想這就是爲什麼蘋果把這個評論放在模板的viewDidUnload方法中// //釋放主視圖的任何保留子視圖。 //例如self.myOutlet = nil;` – 2011-02-22 18:44:00

+0

@fluchtpunkt你能否詳細說明你的評論並將其作爲回答發佈?他們什麼時候應該重新初始化? – JoePasq 2011-02-22 18:51:12

回答

1

您實際上可以在viewDidUnload中釋放所有保留的子視圖。但我曾經以另一種方式做:

-(void) viewDidLoad { 
    someInstanceView1 = [[UIView alloc] init]; 
    [self.view addSubview: someInstanceView1]; 
    [someInstanceView1 release]; 

    someInstanceView2 = [[UIView alloc] init]; 
    [self.view addSubview: someInstanceView2]; 
    [someInstanceView2 release]; 

    //etc... 
    //you have a references to someInstanceView1 and someInstanceView2 with retained counts 1 
} 

在這種情況下,即使出現內存警告,視圖控制器將刪除所有的視圖子視圖。然後再次調用viewDidLoad。所以不會有泄漏,你不需要關心如何釋放這些ivars,因爲唯一的所有者(它對視圖有強烈的引用)是視圖控制器的視圖,它會自動釋放它們。

相關問題