我试图用[myarray removeallobjects]清空一个NSMutableArray;但我收到错误exc_bad_access。这是清空阵列的正确方法吗?我试图把它设置为零,但它也没有用。 实际上我正在做的是用数据填充数组,用户可以选择“刷新”数据,我想在输入刷新的数据之前清空数组。 我无法发布任何代码,因为它太大了。
答案 0 :(得分:61)
-[NSMutableArray removeAllObjects]
是清空NSMutableArray
的正确方法。您最有可能遇到崩溃,因为您仍然在您的UI中使用您在某处删除的对象。
答案 1 :(得分:1)
我认为问题出在您在评论中提供的这段代码中,
[checkinArray addObject:checkinsA];
[checkinsA.taggedID release];
[checkinsA.taggedName release];
[checkinsA release];
taggedID
和taggedName
是checkinsA
对象的属性。它们应仅以dealloc
方法发布。该数组不保留对象树。它仅保留根对象。所以这里不应该发布。所以敲掉中间的两条线并使其成为
[checkinArray addObject:checkinsA];
[checkinsA release];
答案 2 :(得分:0)
您正在崩溃,因为您的阵列不再存在于内存中。
我打赌这是因为你忘了保留它(或者太早发布它)
您可能是使用[NSMutableArray array]
或arrayWithObjects:
或其中某些变体创建的,或者在autorelease
+ alloc
之后调用init
,而如果是一个实例变量,你应该保留它,直到oball被dealloc'd。
请注意,内存管理是iOS开发的关键部分。一定要完全了解它(例如它变得很自然,你会毫不犹豫地保留和何时释放),然后再进一步使用它,一旦你使用它就会避免这样的麻烦。