iOS 类的加载

2022-03-31  本文已影响0人  叔简

一、 应用程序加载

二、类的加载

应用程序相关的加载和编译在main函数之前,在read_image字段中进行镜像images读取
在read_images中找到关于类的信息

static Class realizeClassWithoutSwift(Class cls, Class previously)

在中途通过mangleName筛选到我们当前的类

此时的类还只是带地址的一个名字,并没有实现,但我们相关的ro和rw是有值的

通过以上方法我们知道了相关的类的信息,并且成功将数据映射到内存,包括ro和rw的赋值都在此时实现,所以在此去实现相关元类meta信息,从而进入到最后的methodizeClass(cls, previously);中
最后进入到attachToClass中,从而进行相关类的方法、协议的实现

Person *per = [Person alloc];

程序底层会进行一次消息转发,从而进入到消息的查找从而进入到lookUpImpOrForward
进行程序实现的判断
之后进入到realizeClassMaybeSwiftAndLeaveLocked中,从而实现和非懒加载类一样执行realizeClassWithoutSwift和methodizeClass的流程,从而实现该类的信息

三、分类的加载

methodizeClass(cls, previously)

通过定位到我们的类,然就进行打印相关的列表
通过list,假如为无序时,我们进行相关排序操作

 method_list_t *list = ro->baseMethods();
    if (list) {
        prepareMethodLists(cls, &list, 1, YES, isBundleClass(cls));
        if (rwe) rwe->methods.attachLists(&list, 1);
    }

通过这个方法去加载相关分类的属性,方法,协议等,实现分类,从而对内存中的rwe进行调用和开辟
通过以上的attachList方法,从而循环对分类的属性、协议、方法等操作具体实现

上一篇 下一篇

猜你喜欢

热点阅读