runtime 分类原理概述

简单说就是加载mach-o文件的分类信息和类信息,然后在某些时机把分类信息copy,类信息的rw上,所有才出现了oc上分类方法覆盖类方法的现象

通过查看源码分类信息copy到类的rw上有三处地方,1realizeClass,2loadCategory,3prepareLoad(之后在调用realizeClass)

主类是否lazy,分类是否lazy (0-0)(实现了load函数就是非lazy类)
对于(1-1),在第一次给类发送消息的时候调用relalize在进行attach操作
对于(0-1),在调用map_images->readImage时对主类进行realize操作,由于还没有加载分类信息,先不进行attach操作在调用load_images->loadAllCategory 读取mach-0的分类信息检查改类是否进行realize,如果进行realize,则进行attach操作,没进行的把先关信息保存到一个map里面
对于(1-0),在loadAllCategory存储了分类信息,在prepare_load_methods里面会加载unlazy的方法,这个时候回对响应类进行realize操作,并对分类进行attach操作
对于(0-0),在read_images对主类进行realize,在loadallcategory中对分类进行attach操作

map_images 参数是数据,一次性回调所有mach-o
load_images: 挨个回调,其中loadAllCategory一次性加载所有分类信息

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容