iOS开发学习

iOS strong copy区别

2017-05-29  本文已影响26人  BEYOND黄

用copy定义一个字符串,外界修改字符串,不会影响里面。在set方法会判断这个传的字符串是可变还是不可变,如果是可变,则会生成一个新的地址来存放字符串,若是不可变,则不会生成。_name = [name copy];

NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary;用@property声明 NSString、NSArray、NSDictionary 经常使用 copy 关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作,为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。

block 也经常使用 copy 关键字,block 使用 copy 是从 MRC 遗留下来的“传统”,在 MRC 中,方法内部的 block 是在栈区的,使用 copy 可以把它放到堆区.在 ARC 中写不写都行:对于 block 使用 copy 还是 strong 效果是一样的,但写上 copy 也无伤大雅,还能时刻提醒我们:编译器自动对 block 进行了 copy 操作。如果不写 copy ,该类的调用者有可能会忘记或者根本不知道“编译器会自动对 block 进行了 copy 操作”,他们有可能会在调用之前自行拷贝属性值。

而用strong,则不会进行这种判断。在开发中,我们定义的字符串一般都是不可变的,所以直接用strong,用copy 做判断会消耗性能。

上一篇下一篇

猜你喜欢

热点阅读