【发布时间】:2009-08-28 20:32:34
【问题描述】:
我已经在我的 iphone 程序中使用“extern”和“const”关键字定义了一个常量类,如以下示例中所述:
此时,我正在尝试从 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(): NSPathStore2 类的对象 0x50b330 自动释放,没有适当的池 - 只是泄漏 堆栈:(0x905caf0f 0x904d8647 0x904e039f(等)
我想我可以使用直接调用 Labels 控制器来检索标签,但我更希望将其视为具有所有维护功能的常量。它提供的优势。
哪种方法是从外部源初始化常量的正确(推荐)方法,例如在本例中为 plist?希望您能提供帮助,我已经浪费了好几个小时试图解决这个问题!
提前谢谢你。
【问题讨论】:
标签: iphone objective-c constants