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