怎么用 copy 关键字?

用途:

  1. NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary;
  2. block 也经常使用 copy 关键字,具体原因见官方文档:Objects Use Properties to Keep Track of Blocks
1 block 使用 copy 是从 MRC 遗留下来的“传统”,在 MRC 中,方法内部的 block 是在栈区的,使用 copy 可以把它放到堆区.
2 在 ARC 中写不写都行:对于 block 使用 copy 还是 strong 效果是一样的,但写上 copy 也无伤大雅,还能时刻提醒我们:编译器自动对 block 进行了 copy 操作。
3 如果不写 copy ,该类的调用者有可能会忘记或者根本不知道“编译器会自动对 block 进行了 copy 操作”,他们有可能会在调用之前自行拷贝属性值。这种操作多余而低效。
4 你也许会感觉我这种做法有些怪异,不需要写依然写。如果你这样想,其实是你“日用而不知”,你平时开发中是经常在用我说的这种做法的,比如下面的属性不写copy也行,但是你会选择写还是不写呢?

补充: copy 此特质所表达的所属关系与 strong 类似。然而设置方法并不保留新值,而是将其“拷贝” (copy)。 当属性类型为 NSString 时,经常用此特质来保护其封装性,因为传递给设置方法的新值有可能指向一个 NSMutableString 类的实例。这个类是 NSString 的子类,表示一种可修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值就可能会在对象不知情的情况下遭人更改。所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串值不会无意间变动。只要实现属性所用的对象是“可变的” (mutable),就应该在设置新属性值时拷贝一份。

摘自这里,点击查看更多问题及答案

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 用途:NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可...
    子键_北京不眠夜阅读 2,915评论 0 0
  • 1.什么情况使用关键字copy? 相比 assign 有什么不同? (1).在 ARC 中,在有可能出现循环引用的...
    爱赚钱的依米阅读 6,185评论 0 22
  • 为什么会喜欢许嵩呢?没有理由!我不是喜欢他的第一个人,也不会是最后一个,在众多的明星中他是那么的不同,别人称嵩哥是...
    杨哈哈哈阅读 1,414评论 0 0
  • 那常有微风透过的窗啊 摇摇晃晃的关不上 凝视看去啊 窗内闪着点点灯光 是谁在深夜无法入眠啊 是...
    北暮无泪阅读 1,342评论 0 4
  • 1. 张伟一睁开眼就看见一本方格作业本朝自己飞来,被击倒在地的张伟连滚带爬的捡起作业本跪在一个男人面前。 ...
    激素侠阅读 2,934评论 0 0

友情链接更多精彩内容