isa詳解
在arm64架構(gòu)之前,isa就是一個(gè)普通的指針,存儲(chǔ)著Class、Meta-Class對(duì)象的內(nèi)存地址。從arm64架構(gòu)開(kāi)始,對(duì)isa進(jìn)行了優(yōu)化,變成了一個(gè)共用體(union)結(jié)構(gòu),還使用位域來(lái)存儲(chǔ)更多的信息。
isa_t
nonpointer
0,代表普通的指針,存儲(chǔ)著Class、Meta-Class對(duì)象的內(nèi)存地址。
1,代表優(yōu)化過(guò),使用位域存儲(chǔ)更多的信息。
has_assoc
是否有設(shè)置過(guò)關(guān)聯(lián)對(duì)象,如果沒(méi)有,釋放時(shí)會(huì)更快。
has_cxx_dtor
是否有C++的析構(gòu)函數(shù)(.cxx_destruct),如果沒(méi)有,釋放時(shí)會(huì)更快。
shiftcls
存儲(chǔ)著Class、Meta-Class對(duì)象的內(nèi)存地址信息。
magic
用于在調(diào)試時(shí)分辨對(duì)象是否未完成初始化。
weakly_referenced
是否有被弱引用指向過(guò),如果沒(méi)有,釋放時(shí)會(huì)更快。
deallocating
對(duì)象是否正在釋放。
extra_rc
里面存儲(chǔ)的值是引用計(jì)數(shù)器減1。
has_sidetable_rc
引用計(jì)數(shù)器是否過(guò)大無(wú)法存儲(chǔ)在isa中。
如果為1,那么引用計(jì)數(shù)會(huì)存儲(chǔ)在一個(gè)叫SideTable的類的屬性中。
消息發(fā)送流程
1、消息發(fā)送
流程圖

流程圖
2、動(dòng)態(tài)方法解析
流程圖

流程圖
3、消息轉(zhuǎn)發(fā)
流程圖

流程圖
super的本質(zhì)
super調(diào)用,底層會(huì)轉(zhuǎn)換為objc_msgSendSuper2函數(shù)的調(diào)用,接收2個(gè)參數(shù):struct objc_super2、SEL。
super
receiver是消息接收者,current_class是receiver的Class對(duì)象。