通常iOS咱们定义常量的方法有两种,来看下面例子html
个人.h文件ios
1
2
|
FOUNDATION_EXPORT NSString * const kMyConstantString;
FOUNDATION_EXPORT NSString * const kMyConstantString2;
|
.m文件是这样定义的spa
1
2
|
NSString * const kMyConstantString = @
"Hello"
;
NSString * const kMyConstantString2 = @
"World"
;
|
还有一种是经常使用的#define方法了.net
1
|
#define kMyConstantString @"Hello"
|
有什么区别呢?指针
使用第一种方法在检测字符串的值是否相等的时候更快.对于第一种你能够直接使用(stringInstance == MyFirstConstant)来比较,而define则使用的是这种.([stringInstance isEqualToString:MyFirstConstant])code
哪一个效率高,显而易见了.第一种直接比较的是指针地址,而第二个则是一一比较字符串的每个字符是否相等.htm
FOUNDATION_EXPORT 是作什么的咱们先看下NSObjCRuntime.h中的写法blog
#if defined(__cplusplus) #define FOUNDATION_EXTERN extern "C" #else #define FOUNDATION_EXTERN extern #endif #if TARGET_OS_WIN32 #if defined(NSBUILDINGFOUNDATION) #define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllexport) #else #define FOUNDATION_EXPORT FOUNDATION_EXTERN __declspec(dllimport) #endif #define FOUNDATION_IMPORT FOUNDATION_EXTERN __declspec(dllimport) #else #define FOUNDATION_EXPORT FOUNDATION_EXTERN #define FOUNDATION_IMPORT FOUNDATION_EXTERN #endif
FOUNDATION_EXPORT 拓展了 C 的一些库ci
在iOS开发中,开发
FOUNDATION_EXPORT 和#define 做用是同样的,使用第一种在检索字符串的时候能够用 == #define 须要使用isEqualToString 在效率上前者因为是基于地址的判断 速度会更快一些
参考连接:
1.http://blog.csdn.net/hero118023/article/details/52755177
2.http://www.cocoachina.com/ios/20150210/11130.html
3.http://www.jianshu.com/users/b82d2721ba07/latest_articles