0

所以我有一个强集合变量x(例如NSMutableArray类型),在做dealloc时,如果我只做x = nil,会不会和下面的效果一样?

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

2 回答 2

6

严格来说,两者并不相同。将strong变量设置为nil确实会释放对象。然而,一个数组只有removeAllObjects在它被破坏时才会这样做。如果另一个变量持有对数组的强引用,它将保持活动状态并且不会删除它包含的项目。

于 2012-06-04T16:03:21.413 回答
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/

于 2012-06-04T15:57:17.193 回答