NSMutableArray等容器类的Copy注意事项

来源:互联网 发布:辽宁快乐12选5遗漏数据 编辑:程序博客网 时间:2024/05/19 00:17

NSMutableArray 这一类容器类,即使使用copy或者mutableCopy方法,也只是拷贝了当前第一层元素的指针,并没有做更深层次的拷贝

比如下面的代码中

@interface ViewController ()@property (nonatomic, copy) NSArray* data;@property (nonatomic, strong) NSMutableDictionary* dictData;@end
self.dictData = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@26, @"kein", @15,                     @"mal", nil];//NSMutableArray* arr = [[NSMutableArray alloc] init];[arr addObject:self.dictData];self.data = [arr mutableCopy];//拷贝ArrayNSLog(@"data: %@", self.data);

这时的输出是

data: (        {        kein = 26;        mal = 15;    })

如果这时候从另外一个地方修改了字典里的值

[self.dictData setObject:@64 forKey:@"chiyun"];    NSLog(@"data: %@", self.data);

那么data也会被修改。

(        {        chiyun = 64;        kein = 26;        mal = 15;    })

可以看到,copy只是保证了修改arr这个变量,不会修改data里面的值,但是如果修改arr变量里,某个容器的内容,data同样会被修改,尽管data的声明是NSArray。

这个问题,我觉的最好的避免方法,是在往array里AddObject的时候,如果当前是NSArray,那么相应添加的对象,应该尽量使用NSDictionary这种不可变的容器。

0 0
原创粉丝点击