我知道如果我通過使用屬性來保留IBOutlet,那麼我必須將它設置爲零,但viewDidUnload
中的其他值呢?release view in viewDidUnload
例如,我有三個子視圖廠景,視圖2和視圖3,從筆尖該載荷,這是控制器的頭文件
@interface MyViewController : UIViewController {
IBOutlet UIView *view1;
UIView *view2;
//no reference for view3
}
@property (nonatomic, retain) IBOutlet UIView *view2; //property view2 is an IBOutlet!!
@end
和方法viewDidUnload
- (void)viewDidUnload {
self.view2 = nil;
//[view1 release];
//view1 = nil;
[super viewDidUnload];
}
我必須釋放view1並將其設置爲零?或UIViewController將它設置爲零爲我? view3怎麼樣?
我也必須釋放view1在dealloc
?
編輯: 我想很多人不理解我的問題
首先,廠景是一個IBOutlet其宣佈爲伊娃和分配伊娃不會保留。我知道UIViewController肯定會保留它,但我必須釋放它,否則UIViewController會爲我釋放它?如果UIViewController會釋放它,那麼我不得不再次釋放它。
其次,view2也是一個IBOutlet,雖然它被聲明爲屬性不是伊娃。
@property (nonatomic, retain) IBOutlet UIView *view2;
這是一個保留屬性,因此設置將保留它,所以我知道我必須把它設置成零,以釋放它。我對此毫無問題。
對於view3,沒有參考,因此我假設我不必做任何事情。我還假設不需要爲筆尖中的every
對象做參考。
爲什麼沒有'view3'的參考? – 2011-05-30 09:42:21
不是答案,但如果您在理解引用計數時遇到問題,只需記錄它們:'NSLog(@「view1 retainCount:%d」,[view1 retainCount])'。這將幫助您查看要發佈哪些視圖。還要玩弄「泄漏」工具(build - > profile)。請記住,這並不總是會發生泄漏,例如,當viewController從未被釋放時(因爲從技術上講,這不是問題 - 但它是更好的風格)。 – fzwo 2011-05-30 09:47:55
@Deepak我必須爲每個子視圖做一個參考嗎? – 2011-05-31 02:48:14