gpt4 book ai didi

objective-c - 是提供一个 NSMutableArray 还是从中创建一个 NSArray 更好?

转载 作者:可可西里 更新时间:2023-11-01 06:21:14 26 4
gpt4 key购买 nike

这个问题困扰了我一段时间。

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

如果我将它发送到 viewController,它将毫无用处,因为它只需要读取数组。所以我想知道是发送一个 NSMutableArray 更昂贵,还是创建一个(也许?)更轻量级的 NSArray,以内存分配为代价,然后释放(也许?)更重的 NSMutableArray。

顺便说一下,我知道这是过度优化,但我很好奇。

最佳答案

这与优化无关。

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

它与您希望代码的防御程度有关。

您始终可以返回任何方法声明其返回类型的子类。那就可以了

调用者只会将它视为父类(super class)(在本例中为 NSArray),除非他们通过向下转换为 NSMutableArray 来做一些异常危险的事情 并改变数组。

发生这种情况时,如果您仍在将该数组用作对象中的后备存储,则调用者将有效地修改您的后备存储。

通过 return [[mutArray copy] autorelease]; 您可以确保这种愚蠢行为永远不会发生。而且,事实上,AppKit 因人们对数组进行转换和处理而遭受了足够多的错误,各种方法已经转移到 return [[mutArray copy] autorelease];

还有一个线程含义;只读基础类型通常是线程安全的。读写不是,包括在其他东西正在写入时读取。因此,如果您返回对可变数组的引用,您不能再从另一个线程修改该数组,除非您绝对知道所有外部引用都已消失(顺便说一句,如果没有 poor 是无法知道的设计)。

不可变与可变对副本的性能影响很少成为问题。

关于objective-c - 是提供一个 NSMutableArray 还是从中创建一个 NSArray 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7515233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com