專案中一直在使用yymodel來進行model的轉換。自己閱讀了yymodel的原始碼,下面就從最基本的開始對yymodel進行分析。
標頭檔案yymodel
#if __has_include()
foundation_export double yymodelversionnumber;
foundation_export const unsigned char yymodelversionstring;
#import
#import
#else
#import "nsobject+yymodel.h"
#import "yyclassinfo.h"
#endif
這裡要說下這裡的#if __has_include()
這句話。這句話字面意思是如果標頭檔案中包括了也就是說這個檔案是否存在。如果能被引入 那麼就返回yes 否則返回no.
如果已經引入了yymodel
那麼在這裡繼續引入和
這兩個類。 如果沒有引入
<>
的 那麼就引入兩個子類"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
來定義常量的區別。
YYModel 原始碼分析
instancetype yy modelwithdictionary nsdictionary dictionary 第一步 準備 yymodelmeta 類 分析 1.cache快取 yymodelmeta 類,如果乙個模型已經轉換過,就會儲存到cache裡面,如果下次遇到相同的model,就會...
YYModel 原始碼解讀(一)之YYModel h
if has include foundation export double yymodelversionnumber foundation export const unsigned char yymodelversionstring import import else import nsob...
《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具
檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...