正文
iOS开发中,对于NSString,NSDictionary,NSArray一般都会使用copy来进行修饰,其实用strong的话也没有问题。只是copy修饰在进行赋值时会进行内存的拷贝,相当于赋值之后和被赋值的对象指向不同的内存地址。这样做的好处是防止修改了被赋值对象(等号右边)导致了等号左边的属性发生变化。
当然如果属性本身是对外不可见的,怎么修改都放在.m文件中,这样外界就无法修改类的属性,类的属性只受内部控制,这样可以使用strong来修饰,不过也只是降低了被修改的风险而已。
1 | @property (nonatomic, strong) SJPAnimationViewController *vc; |
上图是demo代码,下图是表现结果.
使用copy修饰的结果,修改了原数据,不会导致赋值之后的数据发生改变。因为指向了不同的地址。
使用strong修饰的结果,修改了原数据,赋值之后的数据也发生了改变,因为指向了相同的地址。
另外追加一点,为何nsstring的值给定之后可以重复修改,nsdictionary和nsarray值给定之后需要修改却不行。
上面这个说法其实是错误的。并不是nssrting可以重复修改,只是string类型修改起来比较容易,重新赋值之后其实本身已经指向了新的内存地址。因此,nsdict和nsarray想要修改值要做的就是修改本身的内存地址,只不过内部可能包含更多数据,所以比起string来说更加繁琐。