我知道这个话题有很多问题。我从未参与过基于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会自动释放对象吗?
答案 0 :(得分:3)
是的,当您的视图控制器被取消分配时,它们将被释放。 viewDidUnload
(不再在iOS 6中调用)与dealloc
不同,也不是"反对" viewDidLoad
的 - 只有当视图在屏幕外时才会在低内存情况下调用。
didReceiveMemoryWarning
中任何瞬态占用内存的对象都应设置为nil - ARC将不自动为您执行此操作。
答案 1 :(得分:2)
是的,ARC将在销毁父对象之前自动释放所有强引用属性/变量。至于“弱”引用,它们不会被保留/释放(无论是否有ARC都是一样的。)
通常不需要在self.data1 = nil
中设置viewDidUnload
,但有时您希望明确显示引用对象的发布位置。如果您想确保在此代码行中发布data1
,请使用您拥有的代码。如果你不关心它何时何地被释放,你就不必这样做。