2011-03-14 20 views

回答

6

主要原因是对不可变对象的copy操作实际上是retain的别名(或者对于垃圾收集,它是无操作)。这是有效的,因为在正确使用不可变对象的情况下,除了通过指针比较之外,您无法观察到原始文件和副本之间的差异。

这很重要,因为“值对象”(如字符串)经常被复制,以避免Kenny Wyland描述的情况。如果你有一个属性被声明为@property (copy) NSString *foo,给它分配一个不可变的字符串将会保留它而没有明显的开销,同时给它分配一个可变字符串将会复制它,以避免它在被授权者后面改变。

-1

根据我的经验,这不是技术上更好地为内存管理的目的IF你知道如何正确地管理内存。我的猜测是,他正在为新可可开发人员推荐它,因为它本质上将帮助他们避免处理内存的一些陷阱。

例如,如果您的类A有一个成员NSString * myString ...那么如果您创建一个NSMutableString * mutable并设置A.myString = mutable ....类A的作者将期望myString不会改变,但由于它实际上是可变,那么它可以。所以他可能会提出这样的建议,以便新开发人员避免在脚下自己拍摄。

这只是一个猜测,但我不知道为什么不可变的内存更有记忆效率。

相关问题