Я определил класс констант в моей программе для iphone, используя ключевые слова 'extern' и 'const', как в примере, описанном в:
Константы в Objective-C
На этом этапе я пытаюсь инициализировать некоторые строковые константы из содержимого файла plist, вместо того, чтобы быть определенным прямо в классе, например, вместо:
// Constants.m
NSString * const MyConstant = @"a constant";
Я хотел бы инициализировать его где-нибудь из файла plist. До сих пор я провел тест с использованием статического метода +(void)load
, но я не совсем доволен этим, например ::
// Constants.m
NSString * ALERT_QUIT_TITLE;
@implementation Constants
+ (void)load {
// this controller contains all the strings retrieved from the plist file
LabelsController *labels = [LabelsController instance];
ALERT_QUIT_TITLE = labels.alertQuitTitle;
}
@end
Используя вызов журнала, я могу убедиться, что код загрузки вызывается на ранней стадии запуска приложения, даже до конструктора AppDelegate. Тем не менее, две вещи, которые я не вижу в этом подходе:
- Мне нужно удалить ключевое слово «const», в противном случае я получаю ошибку компиляции, так как я пытаюсь инициализировать переменную, определенную как константа
- Я получаю какое-то предупреждение о пуле с автоматическим освобождением:
*** _NSAutoreleaseNoPool (): объект 0x50b330 класса NSPathStore2 автоматически освобожден без пула - только утечка
Стек: (0x905caf0f 0x904d8647 0x904e039f (и т. Д.)
Полагаю, я мог бы использовать прямой вызов контроллера Labels для извлечения метки, но я бы хотел больше относиться к нему как к константе, имеющей все свойства. преимущества это обеспечивает.
Какой будет правильный (рекомендуемый) способ инициализации константы из внешнего источника, как в этом случае plist? Надеюсь, вы можете помочь, я потерял несколько часов, пытаясь решить эту проблему!
Заранее спасибо.