![]() |
1
436
对于类型为不可变值类且符合
这就是为什么你想这样做:
的当前值
因为在几乎所有情况下你都想
防止
改变一个对象背后的属性,您应该标记表示它们的属性。
|
![]() |
2
120
拷贝 应用于nsstring。如果它是可变的,那么它就会被复制。如果不是的话,那就保留下来。确切地说,是应用程序中需要的语义(让类型做最好的事情)。 |
![]() |
3
65
是-通常总是使用copy属性。 这是因为你 nsstring属性 可以通过 nsstring实例 或 nsmutableString实例 因此,我们不能真正确定要传递的值是不可变对象还是可变对象。
你应该经常使用
可能有性能原因
无用
|
![]() |
4
39
我试着遵循这个简单的规则:
举个例子:我想坚持住 名称 “Lisa Miller” 复制 )或者我想保持 人 Lisa Miller 坚强的 )?她的名字后来可能改为“丽莎·史密斯”,但她仍然是同一个人。 |
![]() |
5
13
通过这个例子,复制和保留可以解释为:
如果属性是copy类型,那么,
将为创建新副本
但如果保留,
两个
因此,somename字符串中的任何更改都将反映在
|
![]() |
6
4
当然,将“copy”放在属性声明上会很快遇到使用面向对象环境的情况,在这种环境中,堆中的对象是通过引用传递的——您在这里得到的好处之一是,更改对象时,对该对象的所有引用都会看到最新的更改。许多语言提供“ref”或类似的关键字,以允许值类型(即堆栈上的结构)从相同的行为中受益。就我个人而言,我会谨慎地使用copy,如果我觉得应该保护一个属性值不受其分配对象的更改的影响,我可以在分配期间调用该对象的copy方法,例如:
当然,当设计包含该属性的对象时,只有您知道设计是否受益于分配复制的模式- Cocoawithlove.com 有以下说法: “当setter参数可能可变时,应使用copy访问器。 但是如果没有警告,属性的内部状态就不能更改 “—所以判断你是否能承受意外变化的价值,完全是你自己的决定。想象一下这个场景:
在这种情况下,在不使用copy的情况下,我们的contact对象会自动获取新值;但是,如果确实使用了它,我们就必须手动确保检测到更改并进行同步。在这种情况下,保留语义可能是可取的;在另一种情况下,复制可能更合适。 |
![]() |
7
1
|
![]() |
8
0
你应该使用 复制 始终声明nsstring属性
您应该阅读这些内容,以获取有关它是返回不可变字符串(在传递可变字符串的情况下)还是返回保留字符串(在传递不可变字符串的情况下)的更多信息。
|
![]() |
9
0
如果字符串非常大,那么复制将影响性能,并且两个大字符串副本将使用更多内存。 |
![]() |
10
-1
因为名称是(不可变的)
|
![]() |
user2606782 · 限制子视图在superview边界内的移动 7 年前 |