Objective-C-NSMutableArray和NSMutableDictionary的文字和类方法之间的区别

这个问题已经在这里有了答案:            >            Is literal creation of an NSMutableDictionary less efficient than the class helper method?                                    1个
当我开始使用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比d1 / a1与d2 / a2更相似?

还是这只是风格问题?

最佳答案
第一种形式是类工厂方法,当您知道一个集合最初需要多大或者知道大小将是恒定的但内容可能会更改时,该优化方法很有用.

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

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

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

转载注明原文:Objective-C-NSMutableArray和NSMutableDictionary的文字和类方法之间的区别 - 代码日志