目标中的常量

我正在开发一个Cocoa应用程序,并且使用常量NSString s来存储我的首选项的关键名称。

我知道这是一个好主意,因为如果需要,它可以轻松更改密钥。 另外,它是整个“将您的数据从逻辑中分离出来”的概念。

无论如何,是否有一种很好的方法可以为整个应用程序定义一次这些常量? 我确信有一种简单而明智的方式,但现在我的课程重新定义了他们使用的课程。


你应该创建一个头文件

// Constants.h
FOUNDATION_EXPORT NSString *const MyFirstConstant;
FOUNDATION_EXPORT NSString *const MySecondConstant;
//etc.

(如果您的代码不会用于混合C / C ++环境或其他平台,则可以使用extern而不是FOUNDATION_EXPORT

您可以将此文件包含在每个使用常量的文件中或项目的预编译头文件中。

你可以在.m文件中定义这些常量

// Constants.m
NSString *const MyFirstConstant = @"FirstConstant";
NSString *const MySecondConstant = @"SecondConstant";

Constants.m应该被添加到你的应用程序/框架的目标中,以便它被链接到最终产品中。

使用的优点字符串常量代替#define倒是常数是可以测试用于使用指针比较平等( stringInstance == MyFirstConstant )比字符串比较快得多( [stringInstance isEqualToString:MyFirstConstant]和更容易阅读, IMO)。


最简单的方法:

// Prefs.h
#define PREFS_MY_CONSTANT @"prefs_my_constant"

更好的方法:

// Prefs.h
extern NSString * const PREFS_MY_CONSTANT;

// Prefs.m
NSString * const PREFS_MY_CONSTANT = @"prefs_my_constant";

第二个好处是,改变常量的值不会导致重建整个程序。


还有一件事要提及。 如果你需要一个非全局常量,你应该使用static关键字。

// In your *.m file
static NSString * const kNSStringConst = @"const value";

由于static关键字,此const在文件外部不可见。


@QuinnTaylor稍作修改:静态变量在编译单元中可见。 通常,这是一个单独的.m文件(如本例中所示),但是如果将它声明在其他地方包含的头文件中,它可能会咬你,因为编译后会出现链接器错误

链接地址: http://www.djcxy.com/p/5991.html

上一篇: Constants in Objective

下一篇: C to concatenate NSStrings