提供NSMutableArray或从中创建NSArray更好吗?

Jul*_*ien 3 cocoa objective-c ios

这是一个困扰我一段时间的问题.

我想将NSArray中的一些数据发送到viewController,有时我需要创建一个NSMutableArray并逐个元素地填充它.

如果我将它发送到viewController,它将是无用的,因为它只需要读取数组.所以我想知道发送一个NSMutableArray是否更昂贵,或者创建一个(可能?)更轻量级的NSArray,内存分配的成本,并释放(可能?)更重的NSMutableArray.

顺便说一句,我知道这是优化,但我很好奇.

bbu*_*bum 6

这与优化无关.

(或者,非常非常少,仅在非常见的情况下)

它与您希望代码的防御性有关.

您总是可以返回一个子类,无论方法声明它的返回类型是什么.这才有效.

调用者只会将其视为超类(NSArray在这种情况下)的任何内容,除非他们通过向下转换并改变数组来执行异常危险的操作NSMutableArray.

发生这种情况时,如果您仍然使用该数组作为对象中的后备存储,则调用者将有效地从您下面修改您的后备存储.

通过return [[mutArray copy] autorelease];你确保永远不会发生这种愚蠢.而且,事实上,AppKit遭受了人们对阵列进行投射和混乱的错误,各种方法已经转移到了return [[mutArray copy] autorelease];

还有一个线程含义; 只读基础类型通常是线程安全的.读写不是,包括阅读,而其他东西在写.因此,如果您返回对可变数组的引用,则不能再次从另一个线程修改该数组,除非您完全知道所有外部引用都已消失(在没有糟糕的设计的情况下,这是不可知的).

不可变与可变复制在复制上的性能含义很少是一个问题.