Я делаю это религиозно уже пару лет. Проверка правильности self
после вызова методов [super init...]
:
self = [super init];
if (self != nil) {
// initialize
}
return self;
Вы можете сделать это различными способами, так как этот вопрос красиво подводит итог, но этот вопрос касается синтаксиса, мой вопрос о концепции.
Недавно я получил вопрос от коллеги, который изучал Objective-C, и он спросил меня: "Почему я должен проверять существование себя, разве не очевидно, что это там?" и мой короткий ответ был "err, да, хорошо там случаи, когда он может потерпеть неудачу, и почему". Но длинный ответ заключается в том, что я действительно не понимаю себя, почему мы проверяем его везде, когда случаи, когда он может потерпеть неудачу, очень редки. Справочное руководство Apple рассказывает нам о некоторых конкретных случаях, например, при инициализации файлами или при работе с одиночными точками. Но они звучат как очень редкие исключения из правила, которое [super init]
должно просто работать.
Итак, мой вопрос для вас таков: Почему мы всегда проверяем достоверность самого себя? Мы просто внедряем его везде, чтобы поймать это одно исключение, где оно происходит? Почему бы просто не пропустить всю вещь if (self)
и инициализировать наш объект, если шансы его успеха будут на 100% (или это никогда не так)?
P.S. Я понимаю, что этот вопрос должен быть обманом, поскольку он настолько прост, но в моих поисковых запросах появилось много других вопросов о синтаксисе инициализации. Ссылки на Dupe приветствуются, приветствуют!