Почему [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"];