#if __has_include(<YYModel/YYModel.h>) FOUNDATION_EXPORT double YYModelVersionNumber; FOUNDATION_EXPORT const unsigned char YYModelVersionString[]; #import <YYModel/NSObject+YYModel.h> #import <YYModel/YYClassInfo.h> #else #import "NSObject+YYModel.h" #import "YYClassInfo.h" #endif
__has_include
此宏傳入一個你想引入文件的名稱作為參數,如果該文件能夠被引入則返回1,否則返回0。
拓展:
#include / #import
語句有兩種方式包含頭文件,分別是使用雙引號" "
與左右尖括號< >
。其區別是(對於不是使用完全文件路徑名的)頭文件的搜索順序不同
使用雙引號" "
的頭文件的搜索順序:
- 包含該
#include
語句的源文件所在目錄; - 包含該
#include
語句的源文件的已經打開的頭文件的逆序; - 編譯選項-I所指定的目錄
- 環境變量INCLUDE所定義的目錄
使用左右尖括號< >
的頭文件的搜索順序:
- 編譯選項-I所指定的目錄
- 環境變量INCLUDE所定義的目錄
再來介紹下
FOUNDATION_EXPORT 是做什么的我們先看下NSObjCRuntime.h中的寫法
#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 的一些庫
在ios開發中,
FOUNDATION_EXPORT 和#define 作用是一樣的,使用第一種在檢索字符串的時候可以用 == #define 需要使用isEqualToString 在效率上前者由於是基於地址的判斷 速度會更快一些