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