今日所學(xué)20160105

1. runtime 基本概念

基本數(shù)據(jù)結(jié)構(gòu):Class,Method,SEL,IMP,id

Class:指向objc_class的結(jié)構(gòu)體指針,objc_class結(jié)構(gòu)體如下:

Method:指向objc_method的結(jié)構(gòu)體指針,可以從objc_class中獲取objc_method_list,objc_method結(jié)構(gòu)體如下:

SEL:指向objc_selector的結(jié)構(gòu)體指針,用來表示一個(gè)方法的名字,結(jié)構(gòu):typedef struct objc_selector *SEL;

IMP:函數(shù)指針,指向的函數(shù)包含一個(gè)接受消息的對(duì)象id,函數(shù)的方法名字,以及函數(shù)的若干個(gè)參數(shù), 結(jié)構(gòu):typedef void (*IMP)(void /* id, SEL, ... */ );

id:指向objc_object結(jié)構(gòu)體的指針,objc_object中只包含一個(gè)指向objc_class的isa指針,所以任何繼承NSObject的對(duì)象都可以用id表示;

2. KVO實(shí)現(xiàn)代碼

HPNotificationCenter類:用于判斷是否已經(jīng)創(chuàng)建過對(duì)應(yīng)的子類的類對(duì)象

HPTargetClassManager類:用于判斷相同子類的不同實(shí)例對(duì)象,根據(jù)內(nèi)存地址判斷,并創(chuàng)建共同的方法,class, dealloc方法等

HPTargetClass類:重寫觀察對(duì)象的set方法

創(chuàng)建實(shí)例之后,打印其指向的地址,沒有變化,只有用object_getClass()發(fā)現(xiàn)isa指針發(fā)生變化,借助于NSObject+DLIntrospection, po [object_getClass(subClassA) instanceMethods]能看到對(duì)應(yīng)的實(shí)例方法發(fā)生變化

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 1,767評(píng)論 0 9
  • 本文詳細(xì)整理了 Cocoa 的 Runtime 系統(tǒng)的知識(shí),它使得 Objective-C 如虎添翼,具備了靈活的...
    lylaut閱讀 822評(píng)論 0 4
  • 我們常常會(huì)聽說 Objective-C 是一門動(dòng)態(tài)語言,那么這個(gè)「動(dòng)態(tài)」表現(xiàn)在哪呢?我想最主要的表現(xiàn)就是 Obje...
    Ethan_Struggle閱讀 2,231評(píng)論 0 7
  • 前言 runtime其實(shí)在我們?nèi)粘i_發(fā)過程中很少使用到,尤其是像我現(xiàn)在比較初級(jí)的程序猿就更用不到了。但是去面試很多...
    WolfTin閱讀 658評(píng)論 0 2
  • 7:04。 黑色廂式轎車安靜地停在明賢中學(xué)大門口,傳達(dá)室的保安走出來讓轎車搖下車窗。車窗緩緩搖下,一把裝有消音器的...
    徐放屁閱讀 243評(píng)論 0 0