首页 > 代码库 > 关于NSArray使用时用strong修饰还是copy修饰问题测试
关于NSArray使用时用strong修饰还是copy修饰问题测试
大家都知道,使用NSMutableArray时是用strong修饰,例如:
[objc] view plain copy
- @property (nonatomic,strong) NSMutableArray * mutableArray;
但是,NSArray呢?我看大多数人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。
那么,问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致意料之外的bug,看下面代码:
[objc] view plain copy
- //-------声明两个属性
- @property (nonatomic,strong) NSMutableArray * mutableArray;
- @property (nonatomic,strong) NSArray * array;
[objc] view plain copy
- //------执行如下代码
- 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修饰不可变数组,目前还未出现过问题。
关于强弱指针的知识,建议大家参考:点击打开链接
关于NSArray使用时用strong修饰还是copy修饰问题测试
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。