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
- NSMutableArray等容器类的Copy注意事项
- [并发并行]_[Object-C]_[使用NSMutableArray等非线程安全集合类的注意事项]
- NSArray、NSMutableArray的copy、mutableCopy
- NSMutableArray的strong改成copy就崩溃
- 修改NSMutableArray中的元素时的注意事项
- 使用NSArray与NSMutableArray的注意事项
- Objective-C Copy语法(一)对于Objective-C 提供的类对象NSString/NSMutableString; NSArray/NSMutableArray...
- NSMutableArray 被copy、strong修饰后的变化
- NSMutableArray使用copy声明所产生内存泄漏的问题
- 容器删除的注意事项
- 容器的注意事项
- 容器的注意事项
- C++容器的注意事项
- 登录容器的注意事项
- NSString为什么用copy而不是strong,NSMutableString为什么用strong而不是用copy(或者NSArray及NSMutableArray等)
- 继承类中实现copy的相关注意事项及深浅copy
- Copy-On-Write容器的使用
- Qt容器之QVector,QMap,QHash,QList等注意事项
- windbg
- shell中if条件字符串、数字比对,[[ ]]和[ ]区别
- Java文件拆分与合并
- poj 3070 斐波那契数列
- 几天做NOIP原题比赛下来的心得体会
- NSMutableArray等容器类的Copy注意事项
- jQuery 克隆对象
- HDOJ 1686 Oulipo(KMP)
- 【采集层】Kafka 与 Flume 如何选择
- Function插入HUB的过程
- Red and Black (BFS)
- Android 第三方应用广告拦截实现
- SYN 攻击原理以及防范技术
- iOS开发 应用iOS特性实现在应用内打电话,发短信,打开网页等。实现应用间授权以后再整理