2009-05-06 2 views
1

В AppDelegate примера BubbleLevel от Apple, они делают что-то вроде этого:Почему я должен проверить [self class] == [LevelAppDelegate class] в методе инициализации?

+ (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]; 
    } 
} 

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

ответ

3

Этот тест гарантирует, что код инициализации не будет иметь эффекта, если инициализация вызывается при загрузке подкласса.

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

+0

Является '[само класс] == [класс LevelAppDelegate]' эквивалентно '[себе isMemberOfClass: [LevelAppDelegate класс]]'? – adubr

Смежные вопросы