美文网首页
2020-09-03

2020-09-03

作者: 对方正在输入_0 | 来源:发表于2020-09-03 19:24 被阅读0次

使用NSArray时,到底用strong修饰还是copy修饰

iOS开发人员都知道,使用NSMutableArray时是用strong修饰,例如:

@property (nonatomic,strong) NSMutableArray * mutableArray;  

那么,NSArray呢?好像很多人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。

问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致不易察觉的问题,看下面代码:

//-------声明两个属性  

@property (nonatomic,strong) NSMutableArray * mutableArray;  

@property (nonatomic,strong) NSArray * array; 

//------执行如下代码  

self.mutableArray = [NSMutableArrayarray];  

[self.mutableArrayaddObject:@"1"];  

self.array = [NSArrayarray];  

self.array =self.mutableArray;  

NSLog(@"array---%@",self.array);  

[self.mutableArrayaddObject:@"2"];  

NSLog(@"array---%@",self.array);  

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

array---(

    1

)

array---(

    1,

    2

)

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

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

@property (nonatomic, copy) NSArray * array;

运行结果会如下:

array---(

    1

)

 array---(

    1

)

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

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

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

用strong的话 会指向原来的对象。copy的话是一个新的对象。

相关文章

网友评论

      本文标题:2020-09-03

      本文链接:https://www.haomeiwen.com/subject/zhvosktx.html