Могу ли я использовать категорию, чтобы переопределить метод, который сам находится в категории на суперклассе? - PullRequest
1 голос
/ 29 июля 2010
@interface MySuperclass : NSObject {

}

@end

@interface MySuperclass (MyCategory)

- (void)myMethod;

@end

@interface MySubclass : MySuperclass {

}

@end

@interface MySubclass (MyOtherCategory)

- (void)myMethod;

@end

Определено, какая реализация -myMethod будет вызываться?

Кочан заявляет в Программировании в Objective-C, что:

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

Но я не уверен, считается ли категория в суперклассе категориейв том же классе в этом контексте.

Ответы [ 2 ]

3 голосов
/ 29 июля 2010

Хотя я не могу найти ссылку, я думаю, что ясно, что реализация в MySubclass (MyOtherCategory) имеет приоритет. Методы категории добавляются в этот конкретный класс, поэтому реализация «MyOtherCategory» будет принадлежать вашему подклассу, и она будет проверена перед переходом к суперклассу во время отправки сообщения.

Как указано в руководстве Objective-C, многие методы в Какао размещены в категориях. Если порядок поиска не был четко определен, вы не могли бы переопределить ни один из этих методов в категориях на подклассах, что сделало бы категории почти бесполезными.

1 голос
/ 29 июля 2010

Моя интуиция говорит, что с тобой все будет в порядке, но единственный способ узнать это - попробовать.Я считаю, что неопределенность относится только к одному и тому же классу, а не к отношениям супер / подкласс.

...