Расширение класса с использованием категорий с одинаковыми именами методов

Я хочу расширить класс, используя категорию NSArray + Populate.h:

@interface NSArray (Populate)
-(NSArray *) populateArray; 
@end

Как я могу определить ситуацию, если есть другая категория (из другого модуля или библиотеки), расширяя NSArray с помощью метода с тем же именем?

Например, если существует NSArray + Fill.h:

@interface NSArray (Fill)
-(NSArray *) populateArray; 
@end

Насколько я понимаю, механизм времени выполнения будет выбирать одну из версий без каких-либо сбоев?

Ответ 1

Вы не можете обнаружить эту ситуацию, и вы не можете определить, какая реализация -populateArray имеет приоритет. По этой причине некоторые разработчики предпочитают префикс имен своих категорий.

Цитата Документ Objective-C Язык программирования,

Категория не может надежно переопределить методы, объявленные в другой категории того же класса.

Эта проблема имеет особое значение, поскольку многие из классов Cocoa реализуются с использованием категорий. Определенный каркасом метод, который вы пытаетесь переопределить, сам может быть реализован в категории, и поэтому реализация имеет приоритет.