本系列博客是本人的源碼閱讀筆記,如果有 iOS 開發者在看 runtime 的,歡迎大家多多交流。爲了方便討論,本人新建了一個微信羣(iOS技術討論羣),想要加入的,請添加本人微信:zhujinhui207407,【加我前請備註:ios 】,本人博客http://www.kyson.cn 也在不停的更新中,歡迎一起討論
本文完整版詳見筆者小專欄:https://xiaozhuanlan.com/runtime
概述
之前已經大概說過 __objc_classlist
這個 section 表示的是項目中全部類列表,與之關聯的一個 section 爲: __objc_classrefs
,表示項目中被引用的類列表。列一張表看一下:
區 | __objc_classlist | __objc_classrefs |
---|---|---|
含義 | 項目中全部類列表 | 項目中被引用的類列表 |
對應方法 | _getObjc2ClassList | _getObjc2ClassRefs |
對應全局變量 | gdb_objc_realized_classes | noClassesRemapped |
關於這兩個屬性,對應的代碼在方法 _read_images 中:
創建:
gdb_objc_realized_classes =
NXCreateMapTable(NXStrValueMapPrototype, namedClassesSize);
插入:
- Class newCls = readClass(cls, headerIsBundle, headerIsPreoptimized);
- addNamedClass(cls, mangledName, replacing);
- NXMapInsert(gdb_objc_realized_classes, name, cls);
區 | __objc_selrefs |
---|---|
含義 | 方法列表 |
方法名 | _getObjc2SelectorRefs |
對應全局變量 | namedSelectors |