專案中一直在使用YYModel來進行Model的轉換。自己閱讀了YYModel的原始碼,下面就從最基本的開始對YYModel進行分析。
複製程式碼
標頭檔案YYMOdel
#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
複製程式碼
- 程式碼說明:
這裡要說下這裡的 #if __has_include(<YYModel/YYModel.h>)
這句話。這句話字面意思是如果標頭檔案中包括了<YYModel/YYModel.h>
也就是說這個檔案是否存在。如果能被引入 那麼就返回YES 否則返回NO.
如果已經引入了 YYModel
那麼在這裡繼續引入 <YYModel/NSObject+YYModel.h>
和 <YYModel/YYClassInfo.h>
這兩個類。 如果沒有引入<>
的 那麼就引入兩個子類 "NSObject+YYModel.h"
和 "YYClassInfo.h"
然後我們就看到 FOUNDATION_EXPORT double YYModelVersionNumber;
巨集定義定義了一個double 型別的 YYModelVersionNumber
FOUNDATION_EXPORT
和#define
作用是一樣的,使用第一種在檢索字串的時候可以用==
#define
需要使用isEqualToString 在效率上前者由於是基於地址的判斷速度會更快一些.
- 擴充:
#include / #import
語句有兩種方式包含標頭檔案,分別是使用雙引號" "與左右尖括號< >。其區別是(對於不是使用完全檔案路徑名的)標頭檔案的搜尋順序不同
使用雙引號" "
的標頭檔案的搜尋順序:
包含該#include
語句的原始檔所在目錄;
包含該#include
語句的原始檔的已經開啟的標頭檔案的逆序;
編譯選項-I所指定的目錄
環境變數INCLUDE
所定義的目錄
使用左右尖括號< >
的標頭檔案的搜尋順序:
編譯選項-I所指定的目錄
環境變數INCLUDE
所定義的目錄
簡單小結一下:
1.這個類是標頭檔案 主要是引入各個類方便使用者呼叫。以及採用<>
和""
引入到工程中的區別
2.還有就是採用了一種判斷方式 標頭檔案是否能引入指定檔案。
3.採用FOUNDATION_EXPORT
和#define
來定義常量的區別。