A = bookmarkArray
B = issueArray
[issueArray addObject:bookmarkArray];
[bookmarkArray removeAllObjects];
为什么这会使issueArray变空,我该怎么做以确保在清除bookmarkArray时仍然填充了issueArray?
答案 0 :(得分:4)
因为当你调用addObject
时,它会添加引用,而不是对象的副本。因此,原始对象中的任何更改都将反映在存储在数组中的引用中。如果要存储对象的副本,则将其复制并存储在数组中。
NSMutableArray *bookmarkCopy = [bookmarkArray mutableCopy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];
答案 1 :(得分:3)
您可以将bookmarkArray直接添加到issueArray。那么,issueArray就是一个包含单个对象的数组,也就是数组bookmarkArray。如果你改变bookmarkArray,那么你会改变issueArray中的东西。
如果你想将bookmarkArray中当前的所有对象添加到issueArray,那么我建议:
[issueArray addObjectsFromArray:bookmarkArray];
如果你想获取bookmarkArray的副本并将其添加到issueArray,那么我建议taskinoor已经提出了完全相同的建议:
NSMutableArray *bookmarkCopy = [bookmarkArray mutableCopy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];
或者:
NSMutableArray *bookmarkCopy = [bookmarkArray copy];
[issueArray addObject:bookmarkCopy];
[bookmarkCopy release];
如果您不需要副本可变。
答案 2 :(得分:0)
他们极有可能引用相同的对象。你能检查一下吗?
答案 3 :(得分:0)
Tommy和taskinoor的解释是正确的。但是,如果您的目标是使issueArray包含bookmarkArray中的对象,请执行以下操作:
[issueArray addObjectsFromArray:bookmarkArray];
[bookmarkArray removeAllObjects];
确保你清楚区别。在taskinoor的代码中,您将一个对象添加到bookmarkArray,该对象本身就是一个数组。在上面的行中,您要将[bookmarkArray count]
个对象添加到issueArray。