在viewDidUnload中释放视图

问题描述

| 我知道,如果我使用属性保留IBOutlet,则必须在
viewDidUnload
中将其设置为nil,但是其他呢? 例如,我有三个子视图view1,view2和view3,它们从nib加载,并且是控制器的头文件。
@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并将其设置为nil吗?或UIViewController会为我将其设置为nil? 那view3呢? 我还必须在
dealloc
中释放view1吗? 编辑: 我认为很多人不明白我的问题 首先,view1是一个IBOutlet,它声明为一个ivar,分配一个ivar将不会保留它。我知道UIViewController肯定会保留它,但是我必须释放它还是UIViewController会为我释放它?如果UIViewController将释放它,那么我必须再次释放它没有意义。 其次,view2也是一个IBOutlet,尽管它被声明为属性而不是ivar。
@property (nonatomic,retain) IBOutlet UIView *view2;
它是一个保留属性,因此设置它会保留它,所以我知道必须将其设置为nil才能释放它。我对此没有问题。 对于view3,没有参考,因此我假设我不必对此做任何事情。我还假设不需要在笔尖中引用“ 6”对象。     

解决方法

        默认情况下,即使没有为其声明属性,也将保留所有出口。因此,您将需要释放它们。如果继续声明一个“ 7”类属性作为出口,则不需要释放,但是您也不可以依赖它,因为您不是所有者。 因此,您需要同时释放
view1
view2
,因为它们被声明为插座。
view3
是一个不存在的变量,因此不必担心。     ,        装入笔尖时,其所有对象将自动实例化并保留。 然后,nib文件的文件所有者就是UIView的所有者。 如果使用UIView * view2,则无法使用界面构建器将它们连接起来。 所以这对我来说没有任何意义。 您还必须释放dealloc。
- (void)viewDidUnload {
  self.view1 = nil;
  self.view2 = nil;
  [super viewDidUnload];
}

- (void)dealloc {
  [self.view1 release];
  self.view1 = nil;
  [self.view2 release];
  self.view2 = nil;
}
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...