美文网首页
怎么用 copy 关键字?

怎么用 copy 关键字?

作者: Hero_Guo | 来源:发表于2016-12-02 16:45 被阅读0次

用途:

  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),就应该在设置新属性值时拷贝一份。

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

相关文章

  • OC基础知识

    @property 修饰符什么情况使用 weak 关键字,相比 assign 有什么不同?怎么用 copy 关键字...

  • 面试题

    1.怎么用 copy 关键字? 用途:NSString、NSArray、NSDictionary 等等经常使用co...

  • 怎么用 copy 关键字?

    对于字符串和block的属性一般使用copy 字符串使用copy是为了防止外部把字符串内容改了,影响该属性 blo...

  • 怎么用 copy 关键字?

    用途: NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的...

  • 怎么用 copy 关键字?

    用途:NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可...

  • 怎么用 copy 关键字?

    copy 的语义是将对象拷贝一份给新的引用,通过新的引用对它的修改不影响原来那个被拷贝的对象。 NSString、...

  • 怎么用copy关键字

    1. NSString、NSArray、NSDictionary 等经常使用 copy 关键字; 因为父类指针可以...

  • 问题[○○○]:怎么用 copy 关键字?

    NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因为他们有对应的可变类型...

  • 问题:怎么用 copy 关键字?

    NSString、NSArray、NSDictionary等等经常使用copy关键字,是因为他们有对应的可变类型:...

  • 《招一个靠谱的iOS》

    题目: 风格纠错题风格纠错题 什么情况使用 weak 关键字,相比 assign 有什么不同? 怎么用 copy ...

网友评论

      本文标题:怎么用 copy 关键字?

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