YYModel 原始碼解讀(一)之YYModel h

2022-07-07 11:21:12 字數 1621 閱讀 9681

#if __has_include()foundation_export 

double

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...