http://ios.jobbole.com/84919/
http://www.reibang.com/p/f900de4a1495
實(shí)例對(duì)象instance->類(lèi)class->方法method(->SEL->IMP)->實(shí)現(xiàn)函數(shù)
實(shí)例對(duì)象只存放isa指針和實(shí)例變量怠益,由isa指針找到所屬類(lèi)乘综,類(lèi)維護(hù)一個(gè)運(yùn)行時(shí)可接收的方法列表余寥;方法列表中的每個(gè)入口是一個(gè)方法(Method)栈幸,其中key是一個(gè)特定名稱(chēng)妄荔,即選擇器(SEL)寓落,其對(duì)應(yīng)一個(gè)指向底層C實(shí)現(xiàn)函數(shù)的指針秘蛔,即實(shí)現(xiàn)(IMP)湃缎,糠排。運(yùn)行時(shí)機(jī)制最關(guān)鍵核心是objc_msgSend函數(shù)舵稠,通過(guò)給target(類(lèi))發(fā)送selecter(SEL)來(lái)傳遞消息,找到匹配的IMP入宦,指向?qū)崿F(xiàn)的C函數(shù)哺徊。
- 類(lèi)相關(guān):
+ 數(shù)據(jù)類(lèi)型:class,object乾闰;
- isa 元類(lèi)
- superClass 根類(lèi)
+ 操作函數(shù):
- class_:
+ get: 類(lèi)名落追,父類(lèi); 實(shí)例變量,成員變量涯肩;屬性轿钠;實(shí)例方法,類(lèi)方法病苗,方法實(shí)現(xiàn)疗垛;
+ copy: 成員變量列表;屬性列表硫朦;方法列表贷腕;協(xié)議列表;
+ add: 成員變量;屬性泽裳;方法瞒斩;協(xié)議;
+ replace:屬性涮总;方法胸囱;
+ respond:響應(yīng)方法判斷(內(nèi)省)
+ isMetaclass:元類(lèi)判斷(內(nèi)拭们洹)
+ conform:遵循協(xié)議判斷(內(nèi)释)
- objc_:
+ get: 實(shí)例變量蔑鹦;成員變量夺克;類(lèi)名;類(lèi)嚎朽;元類(lèi);關(guān)聯(lián)對(duì)象;
+ copy: 對(duì)象唆姐;類(lèi)瑟押;類(lèi)列表;協(xié)議列表锅很;
+ set: 實(shí)例變量其馏;成員變量;類(lèi)爆安;類(lèi)列表叛复;協(xié)議;關(guān)聯(lián)對(duì)象扔仓;
+ dispose: 對(duì)象褐奥;
- 動(dòng)態(tài)創(chuàng)建/銷(xiāo)毀類(lèi)、對(duì)象 - 成員變量翘簇、屬性相關(guān):
+ 數(shù)據(jù)類(lèi)型:Ivar撬码;objc_property_t;objc_property_attribute_t版保;
+ 操作函數(shù):
- ivar_:
- property_: - 方法消息相關(guān):
+ 數(shù)據(jù)類(lèi)型:SEL呜笑;IMP; Method;方法緩存
+ 操作函數(shù):
- method_:
+ invoke: 方法實(shí)現(xiàn)的返回值彻犁;
+ get: 方法名叫胁;方法實(shí)現(xiàn);參數(shù)與返回值相關(guān)袖裕;
+ set:方法實(shí)現(xiàn)曹抬;
+ exchange:交換方法實(shí)現(xiàn)
+ 方法調(diào)用:msgSend函數(shù)(找到方法實(shí)現(xiàn))
+ 消息轉(zhuǎn)發(fā):
- Method Resolution
- Fast Forwarding
- Normal Forwarding - 協(xié)議相關(guān):
+ 數(shù)據(jù)類(lèi)型:Protocol;
+ 操作函數(shù):
- protocol_:
+ get: 協(xié)議;屬性谤民;
+ copy:協(xié)議列表堰酿;屬性列表;
+ add:屬性张足;方法触创;協(xié)議;
+ isEqual:判斷兩協(xié)議等同为牍;
+ comform:判斷是否遵循協(xié)議哼绑; - 其他:類(lèi)名;版本號(hào)碉咆;類(lèi)信息抖韩;(忽略)