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

cfi*_*her 2 cocoa memory-management immutability

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

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

Jen*_*ton 6

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

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