美文网首页
十五、类的加载

十五、类的加载

作者: KB_MORE | 来源:发表于2020-10-26 15:05 被阅读0次

十四、dyld和objc的关联 中我们从APP启动dyld讲到objc_init,然后是map_images,继而map_images_nolock最后到了_read_images
_read_images中对类进行了一系列的处理
关于类的信息:

1.条件控制进⾏⼀次的加载
2.修复预编译阶段的 @selector 的混乱问题
3.错误混乱的类处理
4.修复重映射⼀些没有被镜像⽂件加载进来的 类
5.修复⼀些消息!
6.当我们类⾥⾯有协议的时候 : readProtocol
7.修复没有被加载的协议
8.分类处理
9.类的加载处理
10.没有被处理的类 优化那些被侵犯的类

在_read_images中我们主要看类是怎么加载的, 因为系统中有好多类, 我们只需要观察我们自己的类就可以了

    // Realize non-lazy classes (for +load methods and static instances) -  懒加载类 -> 非懒加载类
    // 懒 别人不懂我 我就不动 - 让它 提前加载 - load_images 类
    // 懒加载类在什么时候? 
    for (EACH_HEADER) {
        classref_t const *classlist = 
            _getObjc2NonlazyClassList(hi, &count);
        for (i = 0; i < count; i++) {
            Class cls = remapClass(classlist[i]);
            
            const char *mangledName  = cls->mangledName();
            const char *LGPersonName = "LGPerson";
            if (strcmp(mangledName, LGPersonName) == 0) {//这部分是代码是为了只观察我们自己的类
                auto kc_ro = (const class_ro_t *)cls->data();
                printf("_getObjc2NonlazyClassList: 这个是我要研究的 %s \n",LGPersonName);
            }
            
            if (!cls) continue;

            addClassTableEntry(cls);

            if (cls->isSwiftStable()) {
                if (cls->swiftMetadataInitializer()) {
                    _objc_fatal("Swift class %s with a metadata initializer "
                                "is not allowed to be non-lazy",
                                cls->nameForLogging());
                }
                // fixme also disallow relocatable classes
                // We can't disallow all Swift classes because of
                // classes like Swift.__EmptyArrayStorage
            }  // alloc init - 类存在 完备 实例
            realizeClassWithoutSwift(cls, nil);
        }
    }

// Realize non-lazy classes (for +load methods and static instances)这行注释的意思就是初始化非懒加载的类, 那么什么是非懒加载类呢?

实现了load方法静态实例

要观察我们自己创建的类是怎么加载到的呢,就要进行断点调试
项目中已经添加了LGPerson类


LGPerson
LGPerson.m

断点调试发现这里的代码就是进不来


图片.png

为什么呢?
我们在LGPerson中添加load方法, 再次调试就进来了这就对应了上面的注释, 实现了load方法就是非懒加载的类

相关文章

  • 十五、类的加载

    十四、dyld和objc的关联[https://www.jianshu.com/p/7d96db169bf7] 中...

  • 第一章 类加载过程

    要点 类加载过程 类加载器 一、类加载过程 1.类的加载过程 类的加载 .class文件过程分为:加载---->连...

  • 深入理解jvm类加载机制

    1.什么是类加载? 类加载机制一个很大的体系,包括类加载的时机,类加载器,类加载时机。 1.1类加载过程 加载器加...

  • java基础知识之java类加载器

    1. 什么是类加载器 类加载器就是用来加载类的东西!类加载器也是一个类:ClassLoader 类加载器可以被加载...

  • 《深入理解JVM虚拟机》读书笔记-类加载器&Java模块化系统

    类加载器 一.类加载器 1.1 类与类加载器 类加载器的定义: Java虚拟机设计团队有意把 类加载阶段中 的“ ...

  • JVM类加载入门

    一 类加载顺序 class类加载-->验证-->准备--->解析--->初始化 class类加载:通过类加载器加载...

  • 学习笔记 | JAVA的反射(二)

    利用反射机制动态加载类 、获取类的方法、获取类的属性 编译时刻加载类是静态加载类,运行时加载类是动态加载类 正常创...

  • jvm类加载器详解和如何打破双亲委派机制

    类加载过程: 项目启动的时候,并不是加载项目中的所有类,是在使用的时候加载,类加载器加载类的时候首先加载父类,所以...

  • JVM - ClassLoader

    1. 概述 类加载器实际定义了类的namespace。 2.类加载方式之当前类加载器和指定类加载器 类的加载只有两...

  • java-类加载机制

    类的加载机制 主要关注点: 什么是类的加载 类的生命周期 类加载器 双亲委派模型 什么是类的加载 类的加载指的是将...

网友评论

      本文标题:十五、类的加载

      本文链接:https://www.haomeiwen.com/subject/vllamktx.html