码迷,mamicode.com
首页 > 其他好文 > 详细

关于NSArray使用时用strong修饰还是copy修饰问题测试

时间:2017-04-12 13:11:44      阅读:313      评论:0      收藏:0      [点我收藏+]

标签:sdn   csdn   点击   boa   声明   array   clip   nonatomic   sar   

大家都知道,使用NSMutableArray时是用strong修饰,例如:

 

  1. @property (nonatomic,strong) NSMutableArray * mutableArray;  



但是,NSArray呢?我看大多数人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。

那么,问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致意料之外的bug,看下面代码:

  1. //-------声明两个属性  
  2.   
  3. @property (nonatomic,strong) NSMutableArray * mutableArray;  
  4.   
  5. @property (nonatomic,strong) NSArray * array;  



  1. //------执行如下代码  
  2.   
  3.     self.mutableArray = [NSMutableArrayarray];  
  4.   
  5.     [self.mutableArrayaddObject:@"1"];  
  6.   
  7.       
  8.   
  9.     self.array = [NSArrayarray];  
  10.   
  11.     self.array =self.mutableArray;  
  12.   
  13.     NSLog(@"array---%@",self.array);  
  14.   
  15.       
  16.   
  17.     [self.mutableArrayaddObject:@"2"];  
  18.   
  19.     NSLog(@"array---%@",self.array);  



//------运行结果

array---(

    1

)

array---(

    1,

    2

)

也就是说,self.array在没有被直接操作的情况下,跟着self.mutableArray 变化了,这是很危险的。


如果,把array用copy修饰,也就是

@property (nonatomiccopyNSArray * array;

运行结果会如下:

array---(

    1

)

 array---(

    1

)

这次self.array不会跟随self.mutableArray 变化了。


综上:在可能遇到可变数组给不可变数组直接赋值的情况下,使用copy修饰不可变数组。

我一直使用copy修饰不可变数组,目前还未出现过问题。

关于强弱指针的知识,建议大家参考:点击打开链接

关于NSArray使用时用strong修饰还是copy修饰问题测试

标签:sdn   csdn   点击   boa   声明   array   clip   nonatomic   sar   

原文地址:http://www.cnblogs.com/aibangxiansheng/p/6698348.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!