(寫一個系列聊一聊runtime源碼 希望不錯過一些小的細節 然后一點一點深入解說,不知道自己能堅持多久)
(采用1 2 3 4…這樣的方式描述源碼關鍵語句,一些其他知識點也會解析)
objc.h頭文件分析 ?
源碼頭文件第一句話就是
1.typedefstructobjc_class *Class;
(typedef其實就是一個別名關鍵字 這時候 Class class 其實就是相當于structobjc_class *class)
2.typedefstructobjc_object {
Class isa;
} *id;
(id 就相當于structobjc_object *)
3.typedefstructobjc_selector *SEL; ? //定義SEL
4.typedefid(*IMP)(id,SEL, ...); ?//
(稍微解讀一下 因為別名一個復雜的變量的時候 我們只要把類型名直接替換變量名就可以了)
首先看見了IMP,IMP在一個圓括號里,左邊是一個*號。可以確定IMP是一個指針。右邊又是一個圓括號,說明*IMP是一個函數。IMP是一個函數指針,這個函數是一個具有id,SEL,以及一些其他的形參,它的返回值是id;
5.typedefsignedcharBOOL;
#define OBJC_BOOL_DEFINED
#define YES ??????????? (BOOL)1
#define NO????????????? (BOOL)0
(BOOL是一個無符號char,YES表示1 ,NO表示0)
6.#ifndef Nil
#define Nil __DARWIN_NULL/* id of Nil class *
#endif
(Nil表示一個Class為空)
#ifndef nil
#define nil __DARWIN_NULL/* id of Nil instance */
#endif
(nil表示一個對象實例為空)
(比較重要的有關objc.h暫時總結這些)