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
。