简单说就是加载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一次性加载所有分类信息
网友评论