美文网首页
类的加载

类的加载

作者: ios小喽喽 | 来源:发表于2022-08-22 11:41 被阅读0次

objc_init:

exception_init():读取影响运行时的环境变量

tls_init():线程key的绑定

static_init():运行C++静态构造函数,在dyld调用静态构造函数之前,‘linbc’会调用_objcinit()

exception_init():初始化libobjc的异常处理系统

runtime_init():runtime运行时环境初始化,主要是:unattachedCategories,allocatedClasses

图(1)

cache_init():缓存条件初始化

_imp_implementationWithBlock_init():启动回调机制

图(2)

_dyld_objc_notify_register(&map_images, load_images, unmap_image):

map_images(映射镜像文件):1、条件控制进行一次加载,2、修复预编译阶段的‘@selector’的混乱问题,3、错误混乱的类处理,4、修复重映射一些没有被镜像文件加载的类,5、修复一些消息,6、当我们类里面有协议的时候:readProtocol,7修复没有被加载的协议,8、分类处理,9、类的加载处理,10、没有被处理的类优化那些被侵犯的类

图(3)

load_images 分析:

图(4)

懒加载类 :

1、lookUpImpOrForward 2、realizeClassMaybeSwiftMaybeRelock 3、realizeClassWithoutSwift  4、methodizeClass

非懒加载类:

1、readClass 2、_getObjc2NonlazyClassList  3、realizeClassWithoutSwift  4、methodizeClass

类和分类搭配加载:

图(5)

attachCategories:

图(6)

类扩展VS分类:

1:category:类别,分类

        a、专门用来给类添加新的方法,b、不能给类添加成员属性,c、可以通过runtime添加属性属性,d、分类中用@property定义变量,只会生成getter,setter方法的声明,不能生产方法的实现和带下划线的成员变量

2:extension:类扩展

        a、可以说成是特殊的分类,也称作匿名分类

        b、可以给类添加成员属性,但是是私有变量

        c、可以给类添加方法,也是私有方法

关联对象:设值流程

1:创建一个AssociationsManager管理类

2:获取唯一的全局静态哈希Map

3:判断是否插入的关联值是否存在:a、存在走第四步,b、不存在就走 :关联对象插入空流程

4:创建一个空的objectAssociationMap去查询的键值对

5:如果没有这个key就插入一个空的BucketT进去 返回

6:标记对象存在关联对象

7:用当前修饰策略和值组成一个ObjcAssociation替换原来BucketT中的空

8:标记一下ObjectAssociationMap的第一次为false

图(7)

关联对象插入空流程

1、根据DisguisedPtr找到AssociationsHashMap中的迭代查询器

2、清理迭代查询器

3、其实如果插入空置相当于清除

关联对象:取值流程

1、创建一个AssociationsManager管理类

2、获取唯一的全局静态哈希Map

3、根据DisguisedPtr找到AssociationsHashMap中的iterator迭代查询器

4、如果这个迭代查询器不是最后一个获取:ObjectAssociationMap(这里有策略和value)

5、找到ObjectAssociationMap的迭代查询器获取一个经过属性修饰的value

6、返回——_value

相关文章

  • 第一章 类加载过程

    要点 类加载过程 类加载器 一、类加载过程 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-类加载机制

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

  • java类加载器及其原理

    java类加载器 : java中默认有三种类加载器:引导类加载器,扩展类加载器,系统类加载器(也叫应用类加载器) ...

网友评论

      本文标题:类的加载

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