iOS 定义常量
2020-03-28 本文已影响0人
Vergil_wj
常量定义的方式:
-
#define -
extern const -
static const -
FOUNDATION_EXPORT
使用场景
根据常量的作用域选择性使用:
1、如果常量只在某个类的内部使用,则应该在 .m 文件顶部声明为 static const:
static NSString *const cellIdentifier = @"cellIdentifier";
其中加 static 与不加 static 的区别:
- 加
static则作用域为当前.m文件; - 不加
static则作用域为整个项目,其它文件如果需要使用则可以使用全局变量extern或者FOUNDATION_EXPORT声明一下就可以使用了。
2、如果常量被其它类使用则应该在 .h 中使用 extern 或者 FOUNDATION_EXPORT 声明,并在 .m 中定义:
//.h
extern NSString *const cellIdentifier;
//或者
FOUNDATION_EXPORT NSString *const cellIdentifier;
//.m
NSString *const cellIdentifier = @"cellIdentifier";
3、#define 在以上场景都可使用,请节制使用,因为#define在预编译阶段进行替换处理,如果大量使用则每次修改会导致编译时间很长;且#define不做编译检查,可能导致重复定义,const则会进行编译检查,更加安全。
FOUNDATION_EXPORT
看下其定义在 NSObjCRuntime.h 文件:
#if defined(__cplusplus) //C++编译器内部定义的宏
#define FOUNDATION_EXTERN extern "C"
#else //C编译器
#define FOUNDATION_EXTERN extern
#endif
#define FOUNDATION_EXPORT FOUNDATION_EXTERN
很显然,FOUNDATION_EXPORT 相比 extern 有更大兼容性,兼容 C、C++ 格式,推荐使用FOUNDATION_EXPORT。