filterArrayUsingPredicate:实例方法还是类方法?

时间:2015-02-19 13:41:13

标签: objective-c

我对方法filteredArrayUsingPredicate:(NSPredicate *)predicate及其运作方式感到困惑。它似乎是一个NSArray方法,它创建一个包含满足谓词的所有对象的新数组。我已经查看了NSArray的类引用,它看起来像是一个实例方法。

但如果它导致创建一个新数组,为什么它不被归类为类方法呢?

这让我对窗外的类和实例方法有所了解!

1 个答案:

答案 0 :(得分:1)

  

我查看了NSArray的类引用,它看起来像是一个实例方法。

这是绝对正确的。

  

但如果它导致创建一个新数组,为什么它不被归类为类方法呢?

因为它需要NSArray的实例才能开始。否则,你最终会得到这样的签名:

[NSArray filteredArray:someArray usingPredicate:somePredicate];

虽然这个签名也可以,但是现在的签名非常好。事实上,Cocoa中的不可变类型从实例方法返回新对象是惯用的。 NSArrayNSString有很多这样的方法。

另一方面,可变类通常支持更改实例本身的类似方法。例如,filteredArrayUsingPredicate: NSArray方法的对应方式为filterUsingPredicate:的{​​{1}}方法。