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

Ios 如果我没有在viewDidUnload方法中设置property=nil,这意味着什么?,ios,objective-c,memory,properties,Ios,Objective C,Memory,Properties,我在viewcontroller中定义了一个属性,如下所示 @interface QuestionAnswerViewController : UIViewController { Question *question; } @property (nonatomic, retain) Question *question; 我在我的.m文件中合成了这个属性 @synthesize question; 如果我没有在viewDidUnload方法中设置'self.question=n

我在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
}

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

这意味着那些保留了
mainView
子视图
,因为对于那些声明为
retain
的子视图,它们的
retain
计数通常为2,一个是在第一次设置时,另一个是在作为
子视图添加时,当
超级视图
被释放时,
保留
计数仍将是一个。

您仅释放IBOutlets和那些可以在viewDidUnload上轻松重新创建的项目

如果卸载视图(例如通过内存警告自动卸载),则不会卸载未减少保留的任何子零部件,并且会倾斜更少的内存。这最终可能会导致您的应用程序因内存不足而终止


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

实际保留计数未知,可能不是2。事实上,该属性将保留计数增加了1,我们假设视图也增加了。如有必要,该视图将释放其保留的所有内容,我们需要释放该属性所持有的内容。您好,谢谢您的回答。所以在我的例子中,因为self.question没有在viewDidload方法中设置,所以我不应该在viewdidunload方法中将它设置为nil。但是这个财产的保留计数呢?我怎样才能释放它呢?相反,由于它不是一个IBOutlet,这完全取决于您,在您的情况下,似乎您不想将它设置为nil并释放它。对象应在
dealloc
[问题发布]中发布。哦,这是否意味着如果属性不是IOBOutlet,实际上不需要在view中将其设置为nil?只要在dealoc中释放它就足够了(在内存管理方面)是的。实际上没有要求,这只是一个很好的实践,在卸载视图时,它可以在内存不足的情况下提供帮助。