我对方法filteredArrayUsingPredicate:(NSPredicate *)predicate
及其运作方式感到困惑。它似乎是一个NSArray方法,它创建一个包含满足谓词的所有对象的新数组。我已经查看了NSArray的类引用,它看起来像是一个实例方法。
但如果它导致创建一个新数组,为什么它不被归类为类方法呢?
这让我对窗外的类和实例方法有所了解!
答案 0 :(得分:1)
我查看了
NSArray
的类引用,它看起来像是一个实例方法。
这是绝对正确的。
但如果它导致创建一个新数组,为什么它不被归类为类方法呢?
因为它需要NSArray
的实例才能开始。否则,你最终会得到这样的签名:
[NSArray filteredArray:someArray usingPredicate:somePredicate];
虽然这个签名也可以,但是现在的签名非常好。事实上,Cocoa中的不可变类型从实例方法返回新对象是惯用的。 NSArray
和NSString
有很多这样的方法。
另一方面,可变类通常支持更改实例本身的类似方法。例如,filteredArrayUsingPredicate:
NSArray
方法的对应方式为filterUsingPredicate:
的{{1}}方法。