源碼地址:
https://opensource.apple.com/tarballs/objc4/
參考文章:
1)iOS管理對(duì)象內(nèi)存的數(shù)據(jù)結(jié)構(gòu)以及操作算法--SideTables月而、RefcountMap、weak_table_t-一
http://www.reibang.com/p/ef6d9bf8fe59
2)runtime-閑聊內(nèi)存管理
http://ios.jobbole.com/91867/
3)我們的對(duì)象會(huì)經(jīng)歷什么
http://www.reibang.com/p/ff8a7c458c96
4)神經(jīng)病院Objective-C Runtime入院第一天——isa和Class (這個(gè)系列都值得一看)
http://www.reibang.com/p/9d649ce6d0b8
注釋(文章很長父款,我找了自己覺得重要的點(diǎn)梳理了一下):
①深入理解NSObject:
元類:
Category:
深入理解Objective-C:Category
結(jié)合 Category 工作原理分析 OC2.0 中的 runtime
方法執(zhí)行流程:
iOS 程序 main 函數(shù)之前發(fā)生了什么
②isa_t結(jié)構(gòu)體的具體實(shí)現(xiàn)
Tagged Pointer技術(shù):該技術(shù)的由來和它的優(yōu)勢
從 NSObject 的初始化了解 isa:主要了解isa指針的作用和元類的由來
③cache_t的功能
Cache的作用主要是為了優(yōu)化方法調(diào)用的性能憨攒。當(dāng)對(duì)象receiver調(diào)用方法message時(shí)世杀,首先根據(jù)對(duì)象receiver的isa指針查找到它對(duì)應(yīng)的類肝集,然后在類的methodLists中搜索方法,如果沒有找到杏瞻,就使用super_class指針到父類中的methodLists查找,一旦找到就調(diào)用方法浮创。如果沒有找到,有可能消息轉(zhuǎn)發(fā)蒸矛,也可能忽略它。但這樣查找方式效率太低雏掠,因?yàn)橥粋€(gè)類大概只有20%的方法經(jīng)常被調(diào)用,占總調(diào)用次數(shù)的80%乡话。所以使用Cache來緩存經(jīng)常調(diào)用的方法耳奕,當(dāng)調(diào)用方法時(shí)绑青,優(yōu)先在Cache查找,如果沒有找到闸婴,再到methodLists查找。