Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Фатальный вызов init Objective-C

0

Время от времени встречаются  ситуации,  в  которых  безопасное  переопределение основного инициализатора суперкласса оказывается невозможным. Допустим, мы создаем субкласс NSObject с именем WallSafe, а его основным инициализатором является initWithSecretCode:. Однако инициализация secretCode значением по умолчанию не обеспечивает необходимого уровня безопасности в вашем приложении. А это означает, что используемая схема – переопределение init для вызова основного инициализатора нового класса со значениями по умолчанию – оказывается неприемлемой.

Что же делать? Экземпляр WallSafe по-прежнему реагирует на сообщение init. И

кто-нибудь может легко использовать конструкцию вида:

WallSafe *ws = [[WallSafe alloc] init];

Лучшее, что возможно в такой ситуации – такое переопределение основного инициализатора супер класса, которое сообщит разработчику о совершенной ошибке и подскажет ему, как эту ошибку исправить:

-­‐  (id)init {

@throw [NSException exceptionWithName:@"WallSafeInitialization"

reason:@"Use initWithSecretCode:, not init" userInfo:nil];

}

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии