我知道如果我通过使用属性来保留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