Copy类型在NSString、NSArray、NSDictionary中取代Strong类型,但是对于Copy类型的用处,我一直也都是一知半解,只知道是用来保护数据被修改,今天刚好遇到了一点相关的问题,就测试了一下,有了些结果。
代码如上图,当name的类型为strong时,运行代码,会输出
代码可以运行,且没有错误,而原本是NSString的name属性就这样变成了NSMutableString属性了。
但是当代码修改后
如上图,如果此时运行程序,就会发现程序会直接崩溃
错误原因如下:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to mutate immutable object with appendString:'
不可变对象调用了appendString:方法。
至此,我们可以清楚的知道,一旦属性为Copy类型,那么属性就强制限定为了不可变类型,不仅本身无法调用可变类型时的方法,同时就算被转换为可变类型,调用可变方法时也会导致程序崩溃,从而达到保护数据本身不被修改。
如果可变类型的数据使用了copy类型声明,那么可变类型如果调用可变方法就会导致程序崩溃。
总结:
一旦声明属性的时候使用了copy关键字,那么属性就再也不要想使用可变方法了,不管属性声明的是什么类型。
网友评论