我在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的影响,以及是否有其他方法可以防止这种情况发生。
答案 0 :(得分:2)
您只发布IBOutlets以及您可以在viewDidUnload上轻松重新创建的项目。
如果视图被卸载(由内存警告自动说明),那些没有减少其保留的子组件将不会被卸载,并且可能会减少更少的内存。这最终可能会导致您的应用因内存不足而被终止。
在iOS中保留了IBOutlets,因此将其属性设置为nil将其释放。由于正在卸载包含它们的视图,因此这些子视图没有理由存活,当系统重新加载视图时,子视图也会在那时重新加载。
答案 1 :(得分:1)
这意味着那些subViews
保留mainView
,因为对于那些被声明为retain
的人来说,他们的retain
数量通常为2 {1}}第一次和另一次添加为subView
时,superView
被释放时,retain
计数仍然是一个。