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

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

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

 不可变对象的可变拷贝    
| 12
 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
相关账号: