isa詳解
在arm64架構(gòu)之前塞琼,isa就是一個(gè)普通的指針菠净,存儲(chǔ)著Class、Meta-Class對(duì)象的內(nèi)存地址。從arm64架構(gòu)開始毅往,對(duì)isa進(jìn)行了優(yōu)化牵咙,變成了一個(gè)共用體(union)結(jié)構(gòu),還使用位域來(lái)存儲(chǔ)更多的信息攀唯。nonpointer
0霜大,代表普通的指針,存儲(chǔ)著Class革答、Meta-Class對(duì)象的內(nèi)存地址战坤。
1,代表優(yōu)化過(guò)残拐,使用位域存儲(chǔ)更多的信息途茫。
has_assoc
是否有設(shè)置過(guò)關(guān)聯(lián)對(duì)象,如果沒有溪食,釋放時(shí)會(huì)更快囊卜。
has_cxx_dtor
是否有C++的析構(gòu)函數(shù)(.cxx_destruct),如果沒有错沃,釋放時(shí)會(huì)更快栅组。
shiftcls
存儲(chǔ)著Class、Meta-Class對(duì)象的內(nèi)存地址信息枢析。
magic
用于在調(diào)試時(shí)分辨對(duì)象是否未完成初始化玉掸。
weakly_referenced
是否有被弱引用指向過(guò),如果沒有醒叁,釋放時(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。receiver是消息接收者亥至,current_class是receiver的Class對(duì)象贱迟。