我一直试图修复一个bug很长时间,我可以做一些建议。我有两个NSMutableArrays tem
和list
。 list
是一个arrayWithArrays,因此每次我在tem
完成后我都会将数据加载到[list addObject: tem];
我说tem
我的代码就是这样,在向tem
添加一组新数据之前,我删除了它的所有元素并再次开始添加元素。但是,从list
删除元素会导致它们从list
中删除。我该怎么做才能避免将其从{{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
的便捷方法,但您可能需要retain
和release
。
另一方面,如果您想将 tem
内的对象添加到list
中,请使用addObjectsFromArray
:
[list addObjectsFromArray:tem];
// objects in list will not be affected by subsequent changes to tem
[tem removeAllObjects];