我决定开始使用removeAllObjects
,以便我可以重用一些NSMutableArrays。但是,我发现对removeAllObjects
的调用导致数组被释放,因此当第二次显示viewController时它会崩溃。
我看过网络,似乎有些人说removeAllObjects
只是清除他们的数组,而其他人则说它也会释放数组。这是真的吗?它似乎为我释放,但我发现这很奇怪,并期望行为只是释放数组中的对象。文档中没有任何内容警告这一点,我也觉得很奇怪。
编辑:随着NSZombies的开启,我得到的全部是:
- - [__ NSArrayM removeAllObjects]:发送到解除分配的实例0x625e4e0的消息
基本上告诉我,因为数组是由于removeAllObjects而释放的,所以第二次不能调用removeAllObjects ...... Argh!
有人可以帮忙吗?
谢谢!
答案 0 :(得分:3)
removeAllObjects释放数组中的对象但对数组本身没有影响(除了使其为空)。
<强>除非强>
数组中的一个或多个对象具有对数组本身的保留引用。
答案 1 :(得分:3)
好的,所以我是个白痴!
我在做:
[myArray removeAllObjects];
myArray = someOtherObject.someArray;
因此将指针重置为某个其他对象。我现在改为:
[self.myArray removeAllObjects];
[self.myArray addObjectsFromArray:someOtherObject.someArray];
现在好了。我是个白痴!对不起,谢谢你的帮助!
答案 2 :(得分:2)
removeAllObjects
不会释放数组本身。如果它被释放,问题就在其他地方。您可以使用NSZombie的仪器来检查它的释放位置。
答案 3 :(得分:1)
如果你正在自动释放你的MutableArrays,它们可能会在调用removeAllObjects
之后被释放。使用NSZombies来查看它的确切释放位置。
答案 4 :(得分:1)
NSZombies无法告诉您对象的发布位置,因此它会在您第一次向解除分配的对象发送消息时显示。
从该调用向后工作-removeAllObjects,你会发现错误。
答案 5 :(得分:0)
[yourArray removeAllObjects];
似乎yourArray
的元素将以无效方式释放