所以我有一个强大的集合变量x(类型为NSMutableArray,例如),在进行dealloc时,如果我只做x = nil,它会与下面的效果相同吗?
[x removeAllObjects];
[x release]; // not needed in ARC
x = nil;
答案 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/