在Cocoa开发过程中,偏好设置中的键名使用 constant NSString
保存。我认为这是一个很好的idea,因为在必要的时候该方式允许我们方便改变常量值,而且,符合将数据和逻辑分离的理念。
疑惑
有没有一种好方法可以让这些常量在整个应用程序中定义一次?我确信有一种简单而聪明的方法,但是现在我的类只是重新定义它们使用的类。
好的建议
创建Constants类
创建一个Constants类,然后,头文件中定义如下内容:
// Constants.h
FOUNDATION_EXPORT NSString *const MyFirstConstant;
FOUNDATION_EXPORT NSString *const MySecondConstant;
//etc.
如果代码不需要其他平台或在C/C++混编环境下运行,可以将上述FOUNDATION_EXPORT
替换为extern
,即:
// Constants.h
extern NSString *const MyFirstConstant;
extern NSString *const MySecondConstant;
//etc.
可以在任何需要使用常量的地方引用该头文件,或者将该文件引入预编译文件中,如引入PCH文件。
在Constants.m文件中定义如下内容:
// Constants.m
NSString *const MyFirstConstant = @"FirstConstant";
NSString *const MySecondConstant = @"SecondConstant";
应将Constants.m添加到应用程序/框架的target中,以便将其链接到最终产品。
那么,常量的方式与宏定义#define
有何不同呢?主要方便阅读,代码规范。
实际使用中推荐使用该方法,具体使用时,可在PCH文件中引入如下代码:
#ifdef __OBJC__
#import "Constants.h"
#endif
宏定义
#define MyFirstConstant @"prefs_my_constant"
优点:代码中修改常量值后不需要重新编译整个项目即可运行。
总结
使用多个全局变量时,建议使用第一种做法,如果只是在一个文件中使用常量,则建议使用宏定义的方式,在.m文件中定义如下:
#define kNSStringConstant @"Constant NSString"