YYModel原始碼閱讀(一)

秦小風發表於2017-12-21
專案中一直在使用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 來定義常量的區別。

相關文章