2010-08-27 93 views
1

我決定開始使用​​,這樣我可以重新使用我的一些NSMutableArrays。但是,我發現​​的調用會導致數組被釋放,因此當viewController第二次顯示時它會崩潰。「removeAllObjects」是否應該釋放?

我在網上看過,似乎有些人說​​只是清除他們的數組,而其他人說它也釋放數組。這是真的嗎?它似乎爲我釋放,但我覺得很奇怪,並希望行爲只是釋放數組內的對象。文檔中沒有提到這個,我也覺得很奇怪。

編輯:隨着NSZombies開啓,所有我得到的回覆是:

  • - [__ NSArrayM removeAllObjects]:發送到釋放實例0x625e4e0

基本上消息,告訴我,因爲該數組由於removeAllObjects而被釋放,它不能第二次調用removeAllObjects ... Argh!

任何人都可以幫忙嗎?

謝謝!

+0

你可以添加一些代碼來提供上下文 – 2010-08-27 12:20:17

回答

3

好吧,我是一個白癡!

我正在做:因此

[myArray removeAllObjects]; 
myArray = someOtherObject.someArray; 

復位指針以一些其它物體。我現在已將其更改爲:

[self.myArray removeAllObjects]; 
[self.myArray addObjectsFromArray:someOtherObject.someArray]; 

現在好了。我是個白癡!對不起,謝謝你的幫助!

2

​​不會釋放數組本身,因爲您正確地期望。如果它被釋放,問題就在其他地方。您可以使用NSZombie的樂器來檢查它被釋放的位置。

+0

不幸的是所有NSZombie告訴我的是:*** - [__ NSArrayM removeAllObjects]:消息發送到釋放實例0x625e4e0 – jowie 2010-08-27 12:29:23

1

如果您正在自動釋放您的MutableArrays,它們可能在空的時候被釋放,因爲它們在呼叫​​之後。使用NSZombies來準確地查看它的發佈位置。

+0

不幸的是,所有NSZombie告訴我的是:* - [__ NSArrayM removeAllObjects]:發送到已釋放實例0x625e4e0的消息 – jowie 2010-08-27 12:29:52

+1

然後您的數組已在您調用刪除所有對象之前釋放,因此此調用與正在釋放的內容無關 – Gauloises 2010-08-27 12:33:51

+0

發現問題...將下面添加它...我是一個數字:-) – jowie 2010-08-27 12:39:58

3

removeAllObjects釋放數組中的對象,但對數組本身沒有影響(除非將其設置爲空)。

除非

一個或多個對象中陣列的有保留參照數組本身。

+0

nic電子創意!但是我犯了一個非常愚蠢的錯誤......會在下面回答。 – jowie 2010-08-27 12:40:29

+0

+1最後一行。 – 2012-07-16 10:48:54

1

NSZombies不能告訴你對象在哪裏被釋放,所以它顯示你第一次發送消息給釋放對象。

從該調用回退到-removeAllObjects,您會發現該錯誤。

0

[yourArray removeAllObjects]; 似乎的yourArray元素會釋放aotuomatically

相關問題