gpt4 book ai didi

objective-c - 什么时候在 objective-c 中使用 setter 属性 'copy'?

转载 作者:可可西里 更新时间:2023-11-01 03:24:33 25 4
gpt4 key购买 nike

我知道通常您对 NSString 使用 copy,这样您的属性就会保持与您分配它时相同的值,即使在其他地方尝试重新设置它时也是如此。

但我很难完全理解这个概念。这不是基本上适用于任何类型的对象(不仅仅是 NSStrings)吗?

所以我的问题是,“我应该将哪种属性设置为‘复制’,为什么?”

最佳答案

对象是简单的数据位,如字符串,不会引用应用程序中的大量其他对象,非常适合复制。

当然,现在您可以保留字符串之类的东西。这会很好用。但是,如果您有一个可变字符串,并且您修改了它会怎样。现在,引用该字符串的所有其他对象都将看到该修改。这可能不是你想要的。这是复制“更简单”的原因之一,因为对该数据的任何更改都只局限于那部分代码。

另一方面,假设您有一个为您的应用程序编写的类的实例。它引用了你应用程序中的其他对象,它有大量自己的字符串或其他值,而且它是一个复杂的野兽。现在复制这个对象可能不是一个好主意。很有可能,如果您修改此对象,那么您希望将更改传播到包含引用的每个对象。即使你确实复制了它,你是否需要一个浅拷贝(一个新实例,但它的 ivars 引用相同的对象)或一个深拷贝(一个包含每个 ivar 的新副本的新实例)?而有问题的对象甚至可能不支持 <NSCopying> ,这意味着它在技术上根本无法复制。


总结一下:

  • copy :对象是小的原子数据位,没有对其他对象的任何内部引用。
  • retain : 几乎所有其他类型的对象。

关于objective-c - 什么时候在 objective-c 中使用 setter 属性 'copy'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12877652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com