Безопасно ли переопределять метод, определенный категорией, в Objective-C?

У меня есть структура класса типа UIViewControllerSubclass : UIViewController, где единственная функция UIViewControllerSubclass — #import UIViewController+Category.h. Причина, по которой я добавил методы в категорию, заключается в том, что я также могу сделать UITableViewControllerSubclass : UITableViewController, который также будет #import UIViewController+Category.h. Как мы все знаем, не повторяйтесь.

Теперь предположим, что UIViewController+Category.h имеет структуру:

@interface UIViewController(Category)
- (void) method1;
- (void) method2;
@end

Насколько безопасно создавать UIViewControllerSubclassSubclass : UIViewControllerSubclass, который переопределит method1? Я предполагаю, что это сработает из-за передачи сообщений Objective-C, но по какой-то причине моя интуиция подсказывает мне, что я делаю это неправильно.


person paulrehkugler    schedule 29.08.2013    source источник
comment
Вы должны помнить, что Objective-C имеет утиный тип. Если класс поддерживает метод, вы можете (безопасно) вызвать его, даже если метод не определен в файле .h класса. (Как вы проскользнете мимо проверок компилятора, зависит от вас.)   -  person Hot Licks    schedule 29.08.2013


Ответы (1)


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

person Bryan Chacosky    schedule 29.08.2013
comment
Я предполагаю, что это просто кажется небезопасным, потому что метод категории не так тесно связан с классом, как метод экземпляра. - person paulrehkugler; 29.08.2013