Последовательность инициализации объекта в Objective-C

Фреймворк Какао имеет соглашение всегда вызывать self = [super init] в методе init унаследованного класса, потому что [super init ] может вернуть новый экземпляр.

Что произойдет, если я сделаю это?

@interface MyClass : NSObject /* or any other class */ {
    int ivar_;
}
@end

@implementation MyClass

- (id)init {
    ivar_ = 12345;

    if ((self = [super init])) {
        NSLog(@"ivar_'s value is %d", ivar_);
    }
    return self;
}

@end

В случае, когда [super init] вернет новый экземпляр, что я увижу в консоли ? Значение ivar_ равно 0 ?

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

Может ли кто-нибудь мне помочь? Спасибо!

5
задан Alexei Sholik 15 January 2011 в 12:52
поделиться