【问题标题】:Where to Store Project Wide Config Variables? [duplicate]在哪里存储项目范围的配置变量? [复制]
【发布时间】:2013-01-05 13:51:58
【问题描述】:

可能重复:
Where to store global constants in an iOS application?

我想将配置变量存储在一个中心位置。变量在运行时不会改变。它们应该可以从项目中的任何类访问。

我目前的方法是创建一个 GlobalSettings.h 文件,其中定义了这样的配置变量

#define kCacheAge 10.0 //Max. Cache Age in Seconds
#define kNavigationTitleTint colorWithRed:0.443 green:0.471 blue:0.502 alpha:1.0
#define kNavigationTitleFont boldSystemFontOfSize:20.0

...在我需要的地方加上他们的名字。

缺点:

  • 我需要在每个类中手动包含这个 GlobalSettings.h 文件
  • 我无法将这些常量作为字符串的一部分插入(字符串处理似乎比替换操作

有没有更好的方法来做到这一点,也许可以避免提到的缺点?存储配置变量的最佳实践?

【问题讨论】:

  • 避免在#defines 中使用 cmets。如果你使用if (kCacheAge == 1.0) { 之类的东西,它会通过在行中间插入注释来换行。
  • 是的,如果您想在 cmets 中记录您的#define 常量,请将注释放在上面的行中。
  • 我有点不同意这是完全重复的。 (更不用说@Cyrille作为原始问题提出的问题本身就是一种不幸的误导,因为当用户似乎要求本地化字符串资源加载的等效项时,它使用编译时标头,这是样板文件,但在接受的答案中没有提到。)

标签: objective-c ios


【解决方案1】:

如果您在项目前缀标头中包含GlobalSetting.h 标头,它将自动包含在您项目中的每个文件中。在您的项目中查找名为<YourProjectName>-Prefix.pch 的文件。 iOS 项目的标准项目如下所示:

//
// Prefix header for all source files of the 'IOSTest' target in the 'IOSTest' project
//

#import <Availability.h>

#ifndef __IPHONE_5_0
#warning "This project uses features only available in iOS SDK 5.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

在这种情况下,您可以在 Foundation 导入下方添加 #import "GlobalSettings.h"

【讨论】:

  • 没有解释就投反对票——给出了什么?
  • 抱歉,这不是我想要点击的按钮。我必须编辑你的答案才能解锁我的投票。
【解决方案2】:

一个选项是 INI 文件,因为它们在值更改后不需要重新编译。

可以在in this thread 找到一个简单的(未经我测试)示例。

【讨论】:

  • 这个答案与 iOS Objective-C 开发无关。
  • 您可以使用 Object-C 读取 INI 文件,因此恕我直言,这是一个有效的选项,其好处是这些 INI 文件也可以在其他平台上使用。我更改了上面的链接以指向一个更匹配的示例。
猜你喜欢
  • 1970-01-01
  • 2015-11-03
  • 2011-12-12
  • 2013-07-27
  • 2017-06-10
  • 2018-05-08
  • 1970-01-01
  • 2018-08-14
  • 2015-01-22
相关资源
最近更新 更多