我有这段代码:
secondArray = [firstArray objectAtIndex:1];
索引1处的对象已经是[firstArray]
内的NSMutableArray。问题是,当我更改secondArray
时,firstArray
也会发生变化。
我该怎么办?
答案 0 :(得分:5)
您需要按照以下代码执行某些操作:
NSMutableArray *secondArray = [[NSMutableArray alloc] initWithArray: [firstArray objectAtIndex:1] copyItems:YES];
这将创建一个新数组,并将第一个数组中的每个项目复制到新创建的数组中,而不是保留它们,就像代码中的情况一样。
但有一点需要注意:第一个数组中的所有对象都需要符合NSCopying协议才能生效。
答案 1 :(得分:3)
阻止它改变的最好方法是复制数组而不是设置它。我之前遇到过这个问题,这就是我的诀窍
编辑:这样我就不会给你不好的信息,我会把它改成更通用的版本:NSMutableArray *secondArray = [NSMutableArray alloc] initWithCapacity:[[firstArray objectAtIndex:1] count];
[secondArray addObjectsFromArray:[firstArray objectAtIndex:1]];
这应该更适合您的情况。我已经测试了两次以确保通过创建数组并克隆它们,然后修改克隆以查看它们是唯一被修改的对象