Jul*_*ien 3 cocoa objective-c ios
这是一个困扰我一段时间的问题.
我想将NSArray中的一些数据发送到viewController,有时我需要创建一个NSMutableArray并逐个元素地填充它.
如果我将它发送到viewController,它将是无用的,因为它只需要读取数组.所以我想知道发送一个NSMutableArray是否更昂贵,或者创建一个(可能?)更轻量级的NSArray,内存分配的成本,并释放(可能?)更重的NSMutableArray.
顺便说一句,我知道这是优化,但我很好奇.
(或者,非常非常少,仅在非常见的情况下)
它与您希望代码的防御性有关.
您总是可以返回一个子类,无论方法声明它的返回类型是什么.这才有效.
调用者只会将其视为超类(NSArray在这种情况下)的任何内容,除非他们通过向下转换并改变数组来执行异常危险的操作NSMutableArray.
发生这种情况时,如果您仍然使用该数组作为对象中的后备存储,则调用者将有效地从您下面修改您的后备存储.
通过return [[mutArray copy] autorelease];你确保永远不会发生这种愚蠢.而且,事实上,AppKit遭受了人们对阵列进行投射和混乱的错误,各种方法已经转移到了return [[mutArray copy] autorelease];
还有一个线程含义; 只读基础类型通常是线程安全的.读写不是,包括阅读,而其他东西在写.因此,如果您返回对可变数组的引用,则不能再次从另一个线程修改该数组,除非您完全知道所有外部引用都已消失(在没有糟糕的设计的情况下,这是不可知的).
不可变与可变复制在复制上的性能含义很少是一个问题.
| 归档时间: |
|
| 查看次数: |
341 次 |
| 最近记录: |