为什么类方法如
+ (NSMutableArray *)array;
当有完美的父类方法(例如)时需要
+ arrayWithObjects:(id)firstObj, ...;
可以设置为
[array arrayWithObjects:nil]
并具有相同的效果。
它们实际上不是等同的东西吗?
答案 0 :(得分:4)
它们是方便的方法,可以让您更快地获得自动释放的对象,而不必为了获得相同的结果而编写更多内容。
BTW,NSArray
没有名为arrayWithObjects
的实例方法,它们只是类方法。
答案 1 :(得分:1)
[NSArray array]
,但您获得的对象实际上是NSArray
的私有子类,它针对您的具体情况进行了优化。这些便捷方法可以为NSArray
类提供关于使用哪个类的“提示”。
例如,如果调用[NSArray array]
,则会得到一个空的不可变数组。那么,一个空的不可变数组有多少个不同的值?只有一个。因此,在幕后,Cocoa可以将相同的空NSArray
返回到[NSArray array]
的每个调用,这样它就只需要分配其中一个。这是一个漂亮的优化,可以节省一些内存。
现在,这实际上是一个您不需要关注的实现细节,但需要注意的是,您应该使用与您想要的结果最匹配的构造函数,尤其是对于数组,集合等集合类。字典,因为Apple实施了大量优化,使您的应用程序更好地工作。