Почему [super init] когда-либо возвращает ноль, когда "супер" - это NSObject?
Возможный дубликат:
В Objective-C почему я должен проверить, не является ли self = [super init] нулевым?
В книге Objective-C, которую я читаю, говорится, что когда сообщение [init]
отправляется на NSObject
, иногда оно может возвращать nil
, и мы должны проверить возвращаемое значение, прежде чем отправлять больше сообщений на что может оказаться nil
.
self = [super init];
if (self) {
do stuff
}
Я спрашиваю вас, что должно произойти, если NSObject
не сможет init
себя?
Изменить: вопрос конкретно касается экземпляра, где YourClass: NSObject.
Ответы
Ответ 1
NSObject
сам никогда не вернет nil на init
, однако другие классы, наследующие его, могут, поэтому он считает, что хорошая практика всегда проверяет возвращаемое значение init
. Например, это вернет nil:
[[NSData alloc] initWithContentsOfFile:@"path/to/a/file/that/does/not/exist"];