Почему я должен проверять [self class] == [LevelAppDelegate class] в методе инициализации?
-
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]?
Решение
Этот тест гарантирует, что код инициализации не действует, если инициализация вызывается при загрузке подкласса.
Не связан с StackOverflow