ios中關于方法緩存cache策略

文章部分出于自己的理解,有不對的地方,希望大家指正。

實例對象我們可以看作是一個指針,實例對象通過isa指針指向類對象,類對象通過isa指針指向元類對象,類對象和元類對象本身其實都是objc_class結構體,里面存放著我們需要的方法列表等。

那么當我們方法調用的時候,方法是如何緩存的呢?
當我們方法調用的時候,首先通過isa指針找到類對象,然后在類對象的方法列表里面查找相對應的方法,找到以后會加入到我們方法緩存里面,等下次我們再調用的時候,首先會先從緩存里面去查找相關方法,更加的效率。

那如果我們調用的是父類里面的方法呢,其實父類對象里面的方法是不可以緩存到子類方法緩存列表里面的,所以,當我們調用的是父類對象里面的方法的時候,其方法不會在子類對象方法緩存列表里面進行緩存。
元類對象的相關緩存同類對象。

至于緩存擴容和具體的緩存策略:

在arm64結構,也就是真機環(huán)境下,剛開始初始化的緩存方法的容器的長度2,當容器的長度小于8時,是滿容量了才擴容。當容器的長度大于8時,是7/8擴容。也就是說當容器的長度為8時,容器可以存儲8個方法。當容器的長度為16時,當?shù)?5個方法需要存儲進來的時候,容器就要擴容了。

在x86_64架構下,剛開始初始化的容器的長度為4,是3/4擴容。這里的3/4擴容指的是:如果容器的長度為4,當?shù)?個數(shù)據(jù)需要存儲的時候,就要擴容了。如果容器的長度為8,當?shù)?個數(shù)據(jù)需要存儲的時候,就要擴容了。也就是說容器只能存儲容器長度的3/4減1個方法。

還有一點就是:當容器擴容之后,前面存儲的方法也會隨之清空。

參考鏈接:http://www.itdecent.cn/p/fbe5e2ce4b1e

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容