删除NSMutableArray的元素

时间:2011-01-20 12:06:06

标签: objective-c nsmutablearray

我一直试图修复一个bug很长时间,我可以做一些建议。我有两个NSMutableArrays temlistlist是一个arrayWithArrays,因此每次我在tem完成后我都会将数据加载到[list addObject: tem];我说tem我的代码就是这样,在向tem添加一组新数据之前,我删除了它的所有元素并再次开始添加元素。但是,从list删除元素会导致它们从list中删除。我该怎么做才能避免将其从{{1}}中删除?

1 个答案:

答案 0 :(得分:1)

不确定你的意思“'list'是一个arrayWithArrays” - 如果它是一个标准的方法,那就错了 - 所以你应该澄清一下。但回答我认为的问题是你的问题:

addObject添加对象本身,即只是指向数组tem的指针。两个指针仍然引用相同的NSArray实例,因此通过另一个指针执行的任何操作都可以通过另一个实例查看。如果这让您感到困惑,您应该read up on pointers

如果您确实希望将list中的对象分组到tem等内部数组中,则每次都应创建一个新的tem数组:

[list addObject:tem];
tem = [NSMutableArray arrayWithCapacity:1];
// new stuff added to tem will not appear in the array inside list

(此处请注意对象所有权 - 此示例使用自动释放tem的便捷方法,但您可能需要retainrelease

另一方面,如果您想将 tem内的对象添加到list中,请使用addObjectsFromArray

[list addObjectsFromArray:tem];
// objects in list will not be affected by subsequent changes to tem
[tem removeAllObjects];