Почему мы все проверяем if(self) в методах инициализации?

Я делаю это религиозно уже пару лет. Проверка правильности selfпосле вызова методов [super init...]:

self = [super init];
if (self != nil) {
    // initialize
}
return self;

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

Недавно я получил вопрос от коллеги, изучающего Objective-C, и он спросил меня: «Почему я должен проверять существование self, разве не очевидно, что оно существует?» и мой короткий ответ был: «Эээ, да, бывают случаи, когда он может дать сбой, вот почему». Но длинный ответ заключается в том, что я действительно не понимаю, почему мы проверяем его повсюду, когда случаи, когда он может дать сбой, очень редки. Справочник Appleрассказывает нам о некоторых конкретных случаях, например, при инициализации с файлами или при работе с синглтонами. Но это похоже на очень редкие исключения из правила, согласно которому [super init]должны работать.

Итак, мой вопрос к вам таков: Почему мы всегда проверяем действительность self? Мы просто реализуем его везде, чтобы поймать это единственное исключение, где оно происходит? Почему бы просто не пропустить всю if (self)вещь и инициализировать наш объект, если шансы на успех равны 100% (или это никогда не бывает)?

П.С.Я понимаю, что этот вопрос должен быть обманом, поскольку он такой простой, но мои поисковые запросы получили много других вопросов о синтаксисе инициализации. Двойные ссылки приветствуются, ура!

12
задан Community 23 May 2017 в 12:32
поделиться

0 ответов