您认为在 Objective-C 中存储常量(如属性列表的文件名)的最佳实践是什么?
我想改进以下代码中的硬编码“Config.plist”:
NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Config" ofType:@"plist"];
NSDictionary *rows = [[NSDictionary alloc]initWithContentsOfFile:plistPath];
最佳答案
最好的解决方案通常是将这种逻辑移动到模型对象中,例如 MYConfiguration
。这样您就可以使用显式方法查询 MYConfiguration
,而永远不会直接访问 NSDictionary
。
关于该文件的名称,有很多方法可以对其进行抽象,具体取决于您真正需要多少重用(这里可能会过火)。
首先是常量。在 MYConfiguration.m
中,您可以像这样放置一个私有(private)常量:
static NSString * const kConfigurationFileBaseName = @"Config";
你也可以有一个返回路径的方法:
- (NSString *)pathToConfigurationFile {
return [[NSBundle mainBundle] pathForResource:kConfigurationFileBaseName ofType:@"plist"];
}
直接在 pathToConfigurationFile
中硬编码文件名而不是使用常量的情况并不少见。常量通常仅在多次使用该值的情况下才需要。如果给定常量只出现一次,那么将值移到别处有时会使代码更难理解。这些只是指南,不是规则。
如果您需要常量本身公开可用,那么您可以在 MYConfiguration.h
中这样声明它:
extern NSString * const kMYConfigurationFileBaseName;
然后在.m中定义:
NSString * const kMYConfigurationFileBaseName = @"Config";
但是所有这一切的关键是您在与常量的使用相关的 header 中定义这些常量。您不会为所有内容创建一些中央“MYGlobals”垃圾场。
关于objective-c - 存储文件名和属性列表名称常量的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9352070/