Почему я должен проверять [self class] == [LevelAppDelegate class] в методе инициализации? - PullRequest
1 голос
/ 06 мая 2009

В AppDelegate примера BubbleLevel от Apple они делают что-то вроде этого:

+ (void)initialize {
    if ([self class] == [LevelAppDelegate class]) {
        // Register a default value for the instrument calibration. 
        // This will be used if the user hasn't calibrated the instrument.
        NSNumber *defaultCalibrationOffset = [NSNumber numberWithFloat:0.0];
        NSDictionary *resourceDict = [NSDictionary dictionaryWithObject:defaultCalibrationOffset forKey:BubbleLevelCalibrationOffsetKey];
        [[NSUserDefaults standardUserDefaults] registerDefaults:resourceDict];
    }
}

Почему они это делают [self class] == [LevelAppDelegate class]?

1 Ответ

3 голосов
/ 06 мая 2009

Этот тест гарантирует, что код инициализации не действует, если инициализация вызывается при загрузке подкласса.

http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSObject_Class/Reference/Reference.html#//apple_ref/doc/uid/20000050-initialize

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...