Как предотвратить использование других методов инициализации, отличных от моего пользовательского метода в Objective-C

Фон - в моем приложении для iPhone у меня есть собственный UITableViewController - я собирался передать ему некоторую необходимую конфигурацию, расширив существующий метод "(id)initWithStyle:(UITableViewStyle)style" до расширенного пользовательского.

Вопрос — как лучше всего обеспечить, чтобы пользователь этого пользовательского класса контроллера мог вызывать только мой пользовательский метод инициализации, а не initWithStyle или любые другие методы инициализации?


person Greg    schedule 11.07.2011    source источник


Ответы (2)


Вы можете переопределить методы инициализации, которые вы не хотите использовать, и вызвать там исключение.

Вы также можете переопределить их и заставить их инициализироваться назначенным инициализатором.

Кроме того, вы должны указать это в своей документации.

person EmilioPelaez    schedule 11.07.2011

Я обычно документирую это и помещаю вызов [self doesNotRecognizeSelector:_cmd] в методы инициализации, которые не предназначены для использования.

В сочетании с пометкой метода как устаревшего (см. objective-c-header-file">Как пометить функцию как устаревшую в заголовочном файле iPhone Objective C?) предотвращает неожиданности во время выполнения и выдает предупреждение во время компиляции.

person Johannes Rudolph    schedule 11.07.2011