美文网首页
Copy类型的用处

Copy类型的用处

作者: 严谨风 | 来源:发表于2015-12-01 15:34 被阅读32次

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关键字,那么属性就再也不要想使用可变方法了,不管属性声明的是什么类型。

相关文章

  • Copy类型的用处

    Copy类型在NSString、NSArray、NSDictionary中取代Strong类型,但是对于Copy类...

  • copy

    使用copy 自定义类型的copy

  • strong和copy的区别

    stong修饰可变类型 copy修饰可变类型 strong修饰不可变类型 copy修饰不可变类型 总结如下:如果声...

  • iOS内存管理之copy mutableCopy

    不可变类型调用copy方法是不可变类型。可变类型调用copy方法会复制出不可变类型。不可变类型调用mutableC...

  • Objective-C深浅拷贝总结

    对于非可变类型对象,copy是浅拷贝,mutableCopy是深拷贝; 对于可变类型对象,copy是深拷贝,mut...

  • ios 中copy和strong使用之我见

    copy和strong一般情况是不可变类型用copy,可变类型用strong,但是根据个人需要而异。 首先,属性使...

  • block的类型

    每种类型调用copy后的结果

  • Block 内存

    block的copy block的三种类型:NSConcreteStackBlock 存储于栈,copy时复制一份...

  • 字符串属性中的copy与strong

    定义copy和strong的字符串属性 打印结果 用copy修饰属性的类型修改为NSMutableString,再...

  • 15.Kotlin使用处协变的意义与用法

    类型投影 use-site variance(type projection),使用处型变(类型投影) 将类型参数...

网友评论

      本文标题:Copy类型的用处

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