2 bluetooth99 bluetooth99 于 2013.05.03 10:38 提问

给NSMutableArray创建独立实例

需要一份NSMutableArray的复制,所以我用mutableCopy方法。但是我发现如果修改了复制品中的数据,原版也会跟着改变。不知道其他创建NSMutableArray的方法是什么?

delegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
 self.mainImagesArray = [[NSMutableArray alloc]initWithArray:[delegate.arrayForCarCaptureImages mutableCopy]];

修改代码:

UIImage *filteredImage =[[[[self.mainImagesArray objectAtIndex:i]valueForKey:valueVheck] objectAtIndex:j]  copy];
filteredImage =[filteredImage brightness:(1+sliderValue-0.5)];
[[[self.mainImagesArray objectAtIndex:i]valueForKey:valueVheck]removeObjectAtIndex:j];
[[[self.mainImagesArray objectAtIndex:i] valueForKey:valueVheck]insertObject:filteredImage atIndex:j];

一旦执行arrayForCarCaptureImages也会自动改变。

3个回答

lianlianbushell
lianlianbushell   2013.05.03 14:05
NSArray *copiedArray = [[NSArray alloc] initWithArray:[otherArray copy]];
abcdeFGh_xyz
abcdeFGh_xyz   2013.05.03 14:08
delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
self.mainImagesArray = [[NSMutableArray alloc]initWithArray:delegate.mainImagesArray 
                                                  copyItems:YES];


UIImage *filteredImage = self.mainImagesArray[i][valueVheck][j];
filteredImage = [filteredImage brightness:(1+sliderValue-0.5)];
[self.mainImagesArray[i][valueVheck]replaceObjectAtIndex:j 
                                              withObject:filteredImage];

其实你的代码我没太细看,不过给你个方法做参考,看看有没有用。

zhanglei5415
zhanglei5415   Rxr 2013.05.06 09:20

你的拷贝只是"浅拷贝".所谓的"浅拷贝"就是你只拷贝了原对象的指针. 这时的原对象和新拷贝出来的对象指向同一块内存地址,所以当新对象改变时,原来的对象也会发生变化.反之亦然.

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!