温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

IOS Copy什么时候用?

发布时间:2020-07-23 20:02:15 来源:网络 阅读:597 作者:李远超0317 栏目:移动开发

在O-C里面有个值对象的概念,当你新定义一个属性是值对象时就应该用copy来修饰。那么都什么对象是值对象呢?

值对象是指封装了基本值(属于 C 数据类型)且提供与该值相关的服务的对象。值对象以对象形式表示标量类型。Foundation 框架向您提供了以下类(这些类产生对象,用于字符串、二进制数据、日期与时间、数字以及其他值):


  • NSString和NSMutableString

  • NSData和NSMutableData

  • NSDate

  • NSNumber

  • NSValue


异常情况:

   API中对NSArray做为属性时也用copy而不是retain。到底怎么回事?我有点晕,所以就又查了文档

When you declare instances of the value classes as properties, you should use the copy option. 将值类的实例声明为属性时,应该使用 copy 选项。
   意思是值对象应该用copy而不是只有值对象用copy。

我又查了copy和retain的区别。

   copy: 建立一个索引计数为1的对象,然后释放旧对象(两个指针)
   retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1(一个指针)

   也就是说,retain是指针拷贝,copy是内容拷贝

那么为什么API中的NSArray用的是copy呢?

   其实已经很明显了,就是防止外界对其进行修改。

所以用copy还是retain没有绝对的界限,要看需求了。


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI