iOS底層:Runtime

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ì)象。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn)至元數(shù)據(jù)結(jié)尾創(chuàng)建: 董瀟偉,最新修改于: 十二月 23, 2016 轉(zhuǎn)至元數(shù)據(jù)起始第一章:isa和Class一....
    40c0490e5268閱讀 2,030評(píng)論 0 9
  • 1、內(nèi)存布局 stack:方法調(diào)用 heap:通過(guò)alloc等分配對(duì)象 bss:未初始化的全局變量等。 data:...
    AKyS佐毅閱讀 1,712評(píng)論 0 19
  • iOS中內(nèi)存管理機(jī)制是開(kāi)發(fā)中一項(xiàng)很重要的知識(shí),了解iOS中內(nèi)存管理的規(guī)則不管是在開(kāi)發(fā)中還是在學(xué)習(xí)中都能很大程度的幫...
    Horson19閱讀 1,254評(píng)論 0 4
  • iOS中內(nèi)存管理機(jī)制是開(kāi)發(fā)中一項(xiàng)很重要的知識(shí),了解iOS中內(nèi)存管理的規(guī)則不管是在開(kāi)發(fā)中還是在學(xué)習(xí)中都能很大程度的幫...
    Horson19閱讀 2,000評(píng)論 0 7
  • 利用午休的時(shí)間,急急忙忙的趕出一幅簡(jiǎn)筆畫(huà),很可惜彩筆在家里,如果添加色彩搭配一下,應(yīng)該會(huì)更漂亮吧!
    Hebe_c95閱讀 479評(píng)論 1 2

友情鏈接更多精彩內(nèi)容