本文最后更新于:2021年12月22日 上午
问:
这个写法会出什么问题:
1
| @property (copy) NSMutableArray *array;
|
答:
- (1)、copy修饰的属性进行赋值的时候会生成一份不可变的副本,此时修改副本array(增删之类的操作)会提示找不到方法而报异常;
- (2)、不写原子性修饰词默认使用atomic,而atomic性能比nonatomic差很多。
扩展:
1 2 3 4 5 6 7 8
| NSArray *array = [NSArray array];
NSLog(@"%p",array); NSLog(@"%p",[array copy]);
NSLog(@"%@",NSStringFromClass([[array copy] class]));
|
输出:

深拷贝:生成一个新对象,对象内容相同( 除浅拷贝那种情况,其他都是深拷贝)
可变对象的可变拷贝
1 2 3 4 5 6 7 8
| NSMutableArray *mutArray = [NSMutableArray array];
NSLog(@"%p",mutArray); NSLog(@"%p",[mutArray mutableCopy]);
NSLog(@"%@",NSStringFromClass([[mutArray mutableCopy] class]));
|
输出:

可变对象的不可变拷贝
1 2 3 4 5 6 7
| NSMutableArray *mutArray = [NSMutableArray array];
NSLog(@"%p",mutArray); NSLog(@"%p",[mutArray copy]);
NSLog(@"%@",NSStringFromClass([[mutArray copy] class]));
|
输出:

不可变对象的可变拷贝
1 2 3 4 5 6 7
| NSArray *array = [NSArray array];
NSLog(@"%p",array); NSLog(@"%p",[array mutableCopy]);
NSLog(@"%@",NSStringFromClass([[array mutableCopy] class]));
|
输出:

总结
除不可变对象的不可变拷贝为浅拷贝,其余都是深拷贝

联系方式
邮箱: xiebangyao_1994@163.com
相关账号: