FOUNDATION_EXPORT 延伸

通常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

相關文章
相關標籤/搜索