2015-02-19 3 views
0

Я смущен о методе filteredArrayUsingPredicate:(NSPredicate *)predicate и как он работает. Кажется, это метод NSArray, который создает новый массив, содержащий все объекты, которые удовлетворяют предикату. Я просмотрел ссылку на класс NSArray и выглядит как метод экземпляра.Отфильтрован фильтрArrayUsingPredicate: метод экземпляра или метод класса?

Но если это приводит к созданию нового массива, почему он не классифицируется как метод класса?

Это бросило мое понимание методов класса и экземпляра из окна!

ответ

1

Я смотрел под ссылкой класса для NSArray, и он выглядит как метод экземпляра.

Это абсолютно правильно.

Но если это приводит к созданию нового массива, почему он не классифицируется как метод класса?

Поскольку для начала требуется экземпляр NSArray. В противном случае, вы бы в конечном итоге с подписью, как это:

[NSArray filteredArray:someArray usingPredicate:somePredicate]; 

Хотя эта подпись будет ОК тоже ток один совершенно нормально. На самом деле, для неизменных типов в Cocoa является идиоматическим, чтобы возвращать новые объекты из методов экземпляров. NSArray и NSString есть много таких методов.

Сменные классы, с другой стороны, часто поддерживают аналогичные методы, которые изменяют сам экземпляр. Например, аналогом метода filteredArrayUsingPredicate:NSArray будет filterUsingPredicate: метод NSMutableArray.

+0

Спасибо. Это было очень полезно. – cheznead

Смежные вопросы