2013-08-29 4 views
8

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

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

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

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

+1

Вы должны помнить, что Objective-C является «утиной типизированной». Если класс поддерживает метод, который вы можете (безопасно) вызвать, даже если этот метод не определен в файле .h. (Как вы пробираетесь мимо проверок компилятора, зависит от вас.) –

ответ

7

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

+1

Я полагаю, что это просто «чувствует» небезопасно, потому что метод категории не так тесно связан с классом как метод экземпляра. – paulrehkugler