objective-c - 存储文件名和属性列表名称常量的最佳实践

标签 objective-c ios

您认为在 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/

相关文章:

ios - 如何恢复暂停按钮- Sprite Kit

objective-c - 特殊字符不适用于自定义字体

ios - 什么情况下需要使用MTLStoreActionStoreAndMultisampleResolve而不是MTLStoreActionMultisampleResolve?

ios 6 和 ios 7 incosistance View

iphone - UITableView 幻灯片不可编辑行与可编辑行 Xcode iPhone

ios - 提取超过1000个对象时核心数据崩溃

iphone - Xcode重复符号错误

ios - 当我以编程方式添加一个没有约束的 subview 时会发生什么?

ios - 如何将 UITextfield 上的左 View 位置设置为靠近占位符文本

ios - 预加载 webView 不起作用 - 试图减少加载时间