为什么不可变对象在Cocoa中有简单的内存管理?

时间:2011-03-14 18:31:33

标签: cocoa memory-management immutability

在Paul Hegarty的课程中,他建议使用不可变对象来实现内存管理。但是,我找不到原因。

那么,为什么不可变对象更适合内存管理呢?

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:-1)

根据我的经验,从内存管理目的来看,技术上并不是更好 IF 您知道如何正确管理内存。我的猜测是他建议新的可可开发人员使用它,因为它本身可以帮助他们避免一些处理内存的陷阱。

例如,如果您的类A具有成员NSString * myString ...那么如果您创建一个NSMutableString * mutable并设置A.myString = mutable ....类A的编写者将期望myString不改变,但因为实际上可变,那么它可以。所以他可能会建议这样做,以便新开发者避免在脚下射击。

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