为什么在有完美的父类方法时需要这些类方法?

时间:2010-06-17 14:13:44

标签: iphone objective-c

为什么类方法如

+ (NSMutableArray *)array;
当有完美的父类方法(例如

)时需要

+ arrayWithObjects:(id)firstObj, ...;

可以设置为

[array arrayWithObjects:nil]

并具有相同的效果。

它们实际上不是等同的东西吗?

2 个答案:

答案 0 :(得分:4)

它们是方便的方法,可以让您更快地获得自动释放的对象,而不必为了获得相同的结果而编写更多内容。

BTW,NSArray没有名为arrayWithObjects的实例方法,它们只是类方法。

答案 1 :(得分:1)

雅各布的答案是正确的(所以接受那个),但我要补充一点,Cocoa框架在一个名为class clusters的引擎盖下有一个漂亮的东西。我们的想法是,尽管您可以调用[NSArray array],但您获得的对象实际上是NSArray的私有子类,它针对您的具体情况进行了优化。这些便捷方法可以为NSArray类提供关于使用哪个类的“提示”。

例如,如果调用[NSArray array],则会得到一个空的不可变数组。那么,一个空的不可变数组有多少个不同的值?只有一个。因此,在幕后,Cocoa可以将相同的空NSArray返回到[NSArray array]的每个调用,这样它就只需要分配其中一个。这是一个漂亮的优化,可以节省一些内存。

现在,这实际上是一个您不需要关注的实现细节,但需要注意的是,您应该使用与您想要的结果最匹配的构造函数,尤其是对于数组,集合等集合类。字典,因为Apple实施了大量优化,使您的应用程序更好地工作。