#if __has_include()foundation_exportdouble
yymodelversionnumber;
foundation_export
const unsigned char
yymodelversionstring;
#import
#import
#else
#import
"nsobject+yymodel.h
"#import
"yyclassinfo.h
"#endif
此巨集傳入乙個你想引入檔案的名稱作為引數,如果該檔案能夠被引入則返回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 在效率上前者由於是基於位址的判斷 速度會更快一些
YYModel原始碼閱讀(一)
專案中一直在使用yymodel來進行model的轉換。自己閱讀了yymodel的原始碼,下面就從最基本的開始對yymodel進行分析。標頭檔案yymodel if has include foundation export double yymodelversionnumber foundation...
YYModel 原始碼分析
instancetype yy modelwithdictionary nsdictionary dictionary 第一步 準備 yymodelmeta 類 分析 1.cache快取 yymodelmeta 類,如果乙個模型已經轉換過,就會儲存到cache裡面,如果下次遇到相同的model,就會...
JDK之ArrayList原始碼解讀 一
原始碼基於jdb 1.8版本。目錄 建構函式1 建構函式2 建構函式3 contains object o lastindexof object o toarray get int index set int index,e element add e e add int index,e eleme...