2013-07-16 63 views
3

我需要知道NSArray或NSMutableArray的removeAllObjects方法是否釋放內存。NSArray或NSMutableArray的removeAllObjects方法是否釋放內存?

如果我的數組有10000個元素。 我可以使用

[array removeAllObjects]; 

來釋放內存,並與其他元素重新加載它?或者它泄漏內存?

感謝

如果我NSMutable數組的大小是20MB與10.000元素例如...如果我使用removeAllObjects方法......將它的大小是0MB?

回答

3

NS [可變]數組是對對象的引用的集合。調用-removeAllObjects刪除那些引用。陣列本身使用的容量和內存保持不變。在NSMutableArray的情況下,這些引用可以被重用來指向其他對象。 NSArray缺少方法-removeAllObjects,因爲它不可變。

​​對於大量的物體比initWithCapacity略微慢一些。當對象數量達到極限時,真正的性能差異將不得不避免增長陣列。

正如其他人指出的,只有在沒有更強烈的引用時纔會釋放對象。

+0

謝謝...但如果我的NSMutable陣列的大小是20MB與10.000元素,例如...如果我使用removeAllObjects方法...其大小將爲0MB? –

+0

是(如果持有的對象未從別處引用)。該陣列沒有使用20MB的存儲空間,所存放的對象是。如果你使用的是Xcode 5,你可以看到這些東西,如果你設置一個斷點,點擊內存標尺,然後點擊儀器上的配置文件。內存釋放的內存將在內存圖上顯着。 – Jano

0

不,它不會泄漏物體。除了更方便和更快速之外,它與單獨移除每個對象相同。

4

是的,它釋放所有的對象,它不泄漏。 (當然,它並不明確地釋放它們 - 只有當它們被引用時才被釋放)。

+1

當我看到問題的標題時,這是我必須檢查是否有其他人給出的答案。 –

+0

如果我的NSMutable數組的大小是20mb,並帶有10.000個元素,例如...如果我使用removeAllObjects方法...它的大小是0mb嗎? –

+0

@UsiUsi它取決於。釋放一個對象與釋放一個對象相混淆。發送此消息後,該數組將爲空,但沒有人能保證此操作實際上將釋放一些(如果有的話)內存,因爲它可能不僅僅是包含對對象引用的數組。 – 2013-07-16 14:52:01

相關問題