2012-06-04 51 views

回答

6

嚴格地說,二者是不相同的。一個strong變量設置爲nil確實會釋放對象。但是,如果陣列被破壞,陣列將只有​​。如果另一個變量持有對數組的強引用,它將保持活動狀態,不會刪除它包含的項目。

+0

這是真實的,值得意識到的。然而,在幾乎所有情況下,正確的代碼只是'x = nil'。您應該很少調用'removeAllObjects'作爲釋放對象的一部分。如果你是唯一的擁有者,那麼這是多餘的。如果你不是唯一的擁有者,那麼你可能不應該清除其他人背後的陣列。 –

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/

相關問題