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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于NSMutableArray的初始化创建
之前用 :  1 NSMutableArray *array = [NSMutableArray alloc] init];//这并不是一个好方法 后来前辈对我说,用obj-c提供了静态方法 +(id)arrayWithCapacity:size 来创建一个可变数组。看书后发现,这个size数组容量只是数组最终大小的一个参考。size的值是为 Cocoa能够对代码进行一些优化,这个
Objective-C中NSArray和NSMutableArray的基本用法
Objective-C中NSArray和NSMutableArray的基本用法
iOS开发之OC篇(3)—— NSArray、NSMutableArray
版本 Xcode 8.2.1 一、不可变数组NSArray    二、可变数组NSMutableArray
NSArray/NSMutableArray创建,获取,遍历,排序 - iOS
1 数组基本1.1 创建数组NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作下面这种方式相当于什么都没做NSArray * array = [[NSArray alloc] init];NSLog(@"%@",array);1.2 通过构造方法的方式创建一个NSArray在创建一个NSArray的时候,集合的最后一个元素一定是nilNSArray * array1 =
OC NSArray 和 NSMutableArray 常用方法的使用和实例
#import NSInteger intSort(id num1, id num2, void *context); int main(int argc, const char * argv[]) {        //NSArray 不可变数组常用方法     NSArray *arr = [[NSArray alloc] initWithObjec
NSArray和NSMutableArray插入
NSMutableArray 和 NSArray插入
NSMutableArray的初始化
记得之前一直用这个方法对可变数组进行初始化 NSMutableArray *array = [NSMutableArray alloc] init]; //大神说:这并不是一个好方法有人跟我说用obj-c提供了静态方法 +(id)arrayWithCapacity:size 来创建一个可变数组。查Dash后发现,这个size数组容量只是数组最终大小的一个参考。size的值是为 Cocoa能够对代码
把一个NSMutable数组里面的元素导入另外一个NSMutable数组里
oc里面有两个初始化好的mutableArray, str1(str1里面有若个元素)和str2(空数组) 在不再初始化的情况下,把str1里面的元素,全部copy到str2里方法 【str2 addObjectsFromArray:str1]
删除可变数组NSMutableArray中的重复数据
categoryArray = [[NSMutableArray alloc] init];           for (unsigned i = 0; i              if ([categoryArray containsObject:[cateArray objectAtIndex:i]] == NO){                   [categoryArray 
建立一个原子NSMutableArray类
在Cocoa Framework以及GNUStep的Foundation库中,NSMutableArray以及NSMutableDictionary的设计不是多线程安全的,当然这种设计的好处是处理速度快,不需要任何锁进行同步,所以我们在使用Objective-C的这些容器的时候需要注意,在哪个线程中创建它们就在哪个线程中对它们进行操作。不过在某些情况下,我们由于一些算法或业务需求,需要在多个线程中共享一个NSMutableArray容器对象,这时候我们需要通过一些同步机制来实现多线程操作的安全性。