NSMutableArray removeAllObjects 导致崩溃

3

我有一些数组,想要清空它们里面的所有对象,但是使用 removeAllObjects 会导致应用崩溃并返回 sigabrt。在我的调研中,我发现虽然我创建了 NSMutableArrays,但我可能正在创建 NSArray 的实例,但我不确定是否这样做了...这是我对数组所做的一切

ballArray = [[NSMutableArray alloc] init];

ballVelocityArray = [[NSMutableArray alloc] init];

[ballArray addObject:MyUIImageView];

[ballVelocityArray addObject:[NSValue valueWithCGPoint:myCGPoint]];

[ballVelocityArray replaceObjectAtIndex:SomeIndex withObject:[NSValue valueWithCGPoint:NewVelocity]];

[ballArray removeAllObjects];

[ballVelocityArray removeAllObjects];

这是我所做的一切,但我无法弄清楚为什么它会一直崩溃……如果数组中只有一个对象,则功能正常,否则会崩溃。

如果您能提供任何帮助,将不胜感激!


这两个数组中哪一个会导致崩溃? - Sahil Khanna
它在哪个数组上崩溃?看起来这两个数组之间没有关系,因此可以删除不崩溃的数组的代码。 - ThomasW
我相信两者都是,我会再试一次,但我相信我一次只注释了一个,但两次都崩溃了。 - user975134
2
你还应该检查一下变量命名 - MyUIImageView 和 SomeIndex 看起来像类名,而你又将其与正确的命名 myCGPoint 混合使用...但这当然不会导致崩溃。 - TheEye
当程序崩溃时会显示什么信息?类似于引用已释放的对象之类的吗? - TheEye
显示剩余7条评论
2个回答

1

最有可能是因为你在数组中的某个对象上没有正确管理内存。当你从数组中移除一个对象时,它的保留计数会减一。

你可以在清空数组的代码行上打断点,使用调试器查看哪个对象无效。


0
ballArray = [[NSMutableArray alloc] init];

ballVelocityArray = [[NSMutableArray alloc] init];

在分配对象后,您还需要在dealloc函数或其他地方释放对象,请检查一下。如果您已经这样做了,我想告诉您

[ballArray removeAllObjects];

[ballVelocityArray removeAllObjects];

removeAllObjects 不仅会移除数组中的所有对象,还会释放数组对象所占用的内存。因此,如果再次释放数组对象,内存指针将会达到 -1,导致应用程序崩溃。

因此,请确保在使用数组时不要释放数组对象。

[ballArray removeAllObjects];

[ballVelocityArray removeAllObjects];

函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接