Я знаю несколько правил относительно категорий Objective-C:
- Методы категорий не должны переопределять существующие методы (класс или экземпляр).
- Две разные категории, реализующие один и тот же метод для одного и того же класса, приведут к поведению undefined
Я хотел бы знать, что происходит, когда я переопределяю один из моих собственных методов категорий в той же категории. Например:
@interface NSView (MyExtensions)
- (void)foo; // NSView category implementation
@end
@interface MyClass : NSView
{ }
@end
@interface MyClass (MyExtensions)
- (void)foo; // MyClass category implementation
@end
С определенными интерфейсами, какой метод будет выполняться при запуске следующего кода?
MyClass * instance = [[MyClass alloc] initWith...];
[instance foo];
[instance release];
Примечание. С моим компилятором реализация MyClass имеет приоритет, но я не уверен, что это гарантировано, или просто один конкретный вкус поведения undefined.