0

我有一個關於ARC nad NSMutableArray的問題。iOS - 混淆ARC並清除對象的NSMutableArray

這裏的情況:

我有包含列表視圖的所有元素的NSMutableArray(arr1)一個ListView。一個以本地代碼運行的獨立線程將回調變爲objective-c ListView。本地代碼創建一個新的NSMutableArray(arr2),用我的自定義類的元素(每個元素都有一個名稱,id,圖標等)填充它,然後將它傳遞到ListView。

在ListView中,首先我用[arr1 removeAllObjects]清除數組,然後將arr2中的每個元素添加到arr1[arr1 addObject: ..]

NOTES

*所有的代碼,本機和目標c,被編譯爲目標C++代碼。

*本機代碼一部分allocs和init的arr2(和它的所有元素),並調用ListView的東西全部下@autoreleasepool指令

我的問題;

  1. 本地代碼是否有任何內存泄漏?

  2. ListView代碼是否有任何內存泄漏?我用[arr1 removeAllObjects]釋放的舊元素會導致內存泄漏嗎?

  3. @autoreleasepool是否提供與ARC相同的功能,這意味着我不必顯式釋放對象?

+0

爲什麼不檢查儀器以查看是否有任何泄漏? – larsacus

回答

1

1)不應該有,但有時會有小的泄漏(我見過一些鑰匙串和一些音頻庫)。這不是你處理的問題,在大多數情況下是不可能解決的。

2)​​將釋放發送給數組中的所有對象。你可以通過在dealloc方法中放置一個斷點來看到這一點。

3)是ARC @autoreleasepool工作您在上面所描述的相同

的情況看起來還給我。

+0

非常感謝,謝謝 – KaiserJohaan

1

本地代碼是否有任何內存泄漏?

而且由於缺少發佈/自動釋放的(你應該看看weak/strong properties,討論here

是否有從ListView控件代碼的內存泄漏?用[arr1 removeAllObjects]釋放的舊元素I 會導致內存泄漏嗎?

是否@autoreleasepool提供相同的功能ARC,這意味着我 不會必須明確地釋放對象?

您不能用ARC釋放對象。 autoreleasepool將確保在其中分配的對象在關閉花括號之後被銷燬(如果您有一個for循環在每次傳遞中分配大量的東西並且希望確保每個傳遞之間的所有內容都被清除, 例如)。

+0

非常感謝,謝謝 – KaiserJohaan