2010-08-27 74 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

相关问题