gpt4 book ai didi

objective-c - NSMutableArray 和 NSMutableDictionary 的文字和类方法之间的区别

转载 作者:行者123 更新时间:2023-12-03 16:54:39 25 4
gpt4 key购买 nike

当我开始使用 OSX/iOS 时,我使用了

    NSMutableArray *        a1 = [NSMutableArray arrayWithCapacity:123] ;
NSMutableDictionary * d1 = [NSMutableDictionary dictionaryWithCapacity:123] ;

然后我发现了“更简单”的版本

    NSMutableArray *        a2 = [NSMutableArray array] ;
NSMutableDictionary * d2 = [NSMutableDictionary dictionary] ;

我现在已经搬到:

    NSMutableArray *        a3 = [@[] mutableCopy] ;
NSMutableDictionary * d3 = [@{} mutableCopy] ;

从功能上来说,它们看起来都是相同的:一旦以任何一种方式初始化,它们就可以使用,无论它们是如何创建的。差异在哪里?

特别是,我是否应该假设 d3/a3 在内存预分配(或缺乏内存预分配)方面与 d2/a2 比 d1/a1 更相似?

或者这只是风格问题?

最佳答案

第一个形式是类工厂方法,当您知道集合最初需要多大或者您知道大小将保持不变但内容可能会发生变化时,它是一种有用的优化。

形式二是相当于调用new的类工厂方法。这可能与 alloc 后跟 init 相同,也可能不同,但实际上是相同的。

形式三与 alloc 隐式相同,后跟 initWithArray: 或 initWithDictionary: 分别。它很方便,但会生成一个不需要的不可变实例,该实例在 ARC 下被丢弃,可能不清楚它何时被丢弃。

如果您不打算在其他地方再次使用不可变实例,则通常使用形式一或形式二。

关于objective-c - NSMutableArray 和 NSMutableDictionary 的文字和类方法之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16534460/

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