Почему я должен проверять [self class] == [LevelAppDelegate class] в методе инициализации?

StackOverflow https://stackoverflow.com/questions/828787

  •  06-07-2019
  •  | 
  •  

Вопрос

В 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]?

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top