如何正确清空NSMutableArray

时间:2011-06-19 00:46:38

标签: iphone object nsmutablearray

我试图用[myarray removeallobjects]清空一个NSMutableArray;但我收到错误exc_bad_access。这是清空阵列的正确方法吗?我试图把它设置为零,但它也没有用。 实际上我正在做的是用数据填充数组,用户可以选择“刷新”数据,我想在输入刷新的数据之前清空数组。 我无法发布任何代码,因为它太大了。

3 个答案:

答案 0 :(得分:61)

-[NSMutableArray removeAllObjects]是清空NSMutableArray的正确方法。您最有可能遇到崩溃,因为您仍然在您的UI中使用您在某处删除的对象。

答案 1 :(得分:1)

我认为问题出在您在评论中提供的这段代码中,

[checkinArray addObject:checkinsA]; 
[checkinsA.taggedID release];
[checkinsA.taggedName release]; 
[checkinsA release]; 

taggedIDtaggedNamecheckinsA对象的属性。它们应仅以dealloc方法发布。该数组不保留对象树。它仅保留根对象。所以这里不应该发布。所以敲掉中间的两条线并使其成为

[checkinArray addObject:checkinsA]; 
[checkinsA release]; 

答案 2 :(得分:0)

您正在崩溃,因为您的阵列不再存在于内存中。

我打赌这是因为你忘了保留它(或者太早发布它)

您可能是使用[NSMutableArray array]arrayWithObjects:或其中某些变体创建的,或者在autorelease + alloc之后调用init,而如果是一个实例变量,你应该保留它,直到oball被dealloc'd。

请注意,内存管理是iOS开发的关键部分。一定要完全了解它(例如它变得很自然,你会毫不犹豫地保留和何时释放),然后再进一步使用它,一旦你使用它就会避免这样的麻烦。