如何在基于ARC的项目中发挥作用

时间:2012-09-26 05:46:16

标签: objective-c xcode automatic-ref-counting

我知道这个话题有很多问题。我从未参与过基于Non ARC的项目。

我有强大的&弱势属性如下

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

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

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

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

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

2 个答案:

答案 0 :(得分:3)

是的,当您的视图控制器被取消分配时,它们将被释放。 viewDidUnload(不再在iOS 6中调用)与dealloc不同,也不是"反对" viewDidLoad的 - 只有当视图在屏幕外时才会在低内存情况下调用。

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

答案 1 :(得分:2)

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

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