对于一个强大的集合实例,将它分配给nil等于释放它并分配给nil?

时间:2012-06-04 15:46:46

标签: objective-c ios nsmutablearray

所以我有一个强大的集合变量x(类型为NSMutableArray,例如),在进行dealloc时,如果我只做x = nil,它会与下面的效果相同吗?

[x removeAllObjects]; 
[x release]; // not needed in ARC
x = nil; 

2 个答案:

答案 0 :(得分:6)

严格来说,两者并不完全相同。将strong变量设置为nil确实会释放该对象。但是,如果数组被销毁,则只会removeAllObjects。如果另一个变量拥有对数组的强引用,它将保持活动状态,而不是删除它包含的项。

答案 1 :(得分:1)

是的,这正是它会做的。我喜欢它的方式,就像一个非原子的,保留属性,但它适用于所有变量,其中每个赋值释放旧值并分配新值。因此,将x分配给nil将释放旧值。就像没有ARC一样,你真的不需要removeAllObjects,因为销毁像NSArray这样的容器会导致它释放所有引用其他对象。

为了更好地了解ARC,我建议您观看2011年WWDC视频,该视频可在developer.apple.com上找到。

另一个值得阅读的好资源是http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/