如果我没有在viewDidUnload方法中设置property = nil,这意味着什么?

时间:2011-10-05 01:52:07

标签: ios objective-c memory properties

我在viewcontroller中定义了一个属性,如下所示

@interface QuestionAnswerViewController : UIViewController 
{
    Question *question;
}

@property (nonatomic, retain) Question *question;

我在我的.m文件中合成了该属性

@synthesize question;

如果我在viewDidUnload方法中未设置'self.question = nil',是否会出现任何问题?

- (void)viewDidUnload
{
    [super viewDidUnload];
    //Any issues if I don't set this?
    self.question = nil
}

我问这个的原因是因为'question属性'实际上是从另一个视图控制器传入的。我意识到在低内存的情况下,我的视图控制器的视图将被自动卸载,所以如果我设置self.question = nil,我将丢失当前页面上的信息(self.question变为零)。只是想确认未将合成属性设置为nil的影响,以及是否有其他方法可以防止这种情况发生。

2 个答案:

答案 0 :(得分:2)

您只发布IBOutlets以及您可以在viewDidUnload上轻松重新创建的项目。

如果视图被卸载(由内存警告自动说明),那些没有减少其保留的子组件将不会被卸载,并且可能会减少更少的内存。这最终可能会导致您的应用因内存不足而被终止。

在iOS中保留了IBOutlets,因此将其属性设置为nil将其释放。由于正在卸载包含它们的视图,因此这些子视图没有理由存活,当系统重新加载视图时,子视图也会在那时重新加载。

答案 1 :(得分:1)

这意味着那些subViews保留mainView,因为对于那些被声明为retain的人来说,他们的retain数量通常为2 {1}}第一次和另一次添加为subView时,superView被释放时,retain计数仍然是一个。