4

我知道关于这个话题有很多问题。我从未从事过基于非 ARC 的项目。

我有如下强弱属性

@property(strong,nonatomic)NSArray *data1;
@property(unsafe_unretained, nonatomic)NSArray *data2;

我在某些地方看到人们明确地将 viewDidUnload 中的数据设为 nil。

IE

-(void)viewDidUnload{
    self.data1=nil;
    self.data2=nil;
}

我的问题是如果我不这样做(我的意思是如果我不使 data1 和 data2 为零

在 viewDidUnload) 中,ARC 会自动释放对象吗?

4

2 回答 2

3

是的,当您的视图控制器被释放时,它们将被释放。viewDidUnload(从 iOS 6 开始不再称为)与 不同dealloc,也不是“相反” viewDidLoad- 它仅在内存不足的情况下被调用,当视图离开屏幕时。

任何瞬态的、占用内存的对象都应设置为 nil didReceiveMemoryWarning- ARC不会自动为您执行此操作。

于 2012-09-26T05:57:31.603 回答
2

是的,ARC 会在父对象销毁之前自动释放所有强引用属性/变量。至于“弱”引用,它们不会被保留/释放(不管有没有 ARC)。

通常不需要设置self.data1 = nilviewDidUnload但有时您希望明确显示您的引用对象的释放位置。如果您想确保data1在这行代码中发布您的代码,请使用您拥有的代码。如果您不关心它的发布时间和地点,则不必这样做。

于 2012-09-26T05:58:16.220 回答