2012-04-19 24 views
1

我有類似的問題,這樣的:What is the difference between setting object = nil and [object release] VS [object release] and object = nil?將nil分配給初始化對象的變量是釋放它嗎?

NSMutableArray *myExampleArray = [[NSMutableArray alloc] init]; 
myExampleArray = nil; 

我使用的iOS 5.0 自動引用計數,所以其實我不釋放任何對象。所以如果我把它分配給nil,它等於[myExampleArray release]?

我知道我不能以後再使用myExampleArray而無需重新初始化它。接下來的問題。 明確這個NSArray的最佳途徑是什麼?

回答

7

是,在ARC環境中,你永遠不會調用釋放。因此,將nil分配給變量將釋放該對象。

在非ARC環境中,您將自行完成一個發佈,以便對象被銷燬。但變量仍然指向舊的對象地址。但沒有任何對象了,所以如果稍後使用該變量,您可能會崩潰(EXC_BAD_ACCESS)。如果你也指定零,那不會發生。因爲變量不會再指向舊的對象地址。

您的其他問題: 如果您以後再需要該陣列,則可以在NSMutableArray上調用removeAllobjects以刪除所有添加的對象,如Ankit Gupta所說。這將導致一個空數組,它仍然存在,因此您可以重用它。

+0

謝謝!這有助於填補空白。 – Kuba 2012-04-19 08:26:41

3

不要使用無爲對象
嘗試這一行:

[myExampleArray removeAllobjects]; 
+0

謝謝,但我也想知道分配給零的是什麼?它與釋放內存相同嗎? – Kuba 2012-04-19 08:13:06

+0

@Kuba分配給'nil'與釋放內存相似,但不一樣。它將首先減少引用計數,如果該計數器現在爲0,它將立即釋放內存(不一定立即)。清空數組有些不同:只有數組的元素受引用計數減少的影響。 – 2017-07-31 02:04:58

相關問題