所以我有一个强集合变量x(例如NSMutableArray类型),在做dealloc时,如果我只做x = nil,会不会和下面的效果一样?
[x removeAllObjects];
[x release]; // not needed in ARC
x = nil;
所以我有一个强集合变量x(例如NSMutableArray类型),在做dealloc时,如果我只做x = nil,会不会和下面的效果一样?
[x removeAllObjects];
[x release]; // not needed in ARC
x = nil;
严格来说,两者并不相同。将strong
变量设置为nil
确实会释放对象。然而,一个数组只有removeAllObjects
在它被破坏时才会这样做。如果另一个变量持有对数组的强引用,它将保持活动状态并且不会删除它包含的项目。
是的,这正是它会做的。我喜欢这样想,就像一个非原子的保留属性,但它适用于所有变量,其中每个分配释放旧值并分配新值。因此将 x 分配给 nil 将释放旧值。就像没有 ARC 一样,您实际上并不需要 removeAllObjects,因为销毁像 NSArray 这样的容器会导致它释放所有其他对象的引用。
为了更好地了解 ARC,我建议您观看 2011 年 WWDC 视频,该视频可在 developer.apple.com 上获得。
另一个值得阅读的好资源是http://longweekendmobile.com/2011/09/07/objc-automatic-reference-counting-in-xcode-explained/