美文网首页
isa的结构

isa的结构

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

isa的结构如图所示:它是一个联合体(union),节约内存空间

图(1)

上图中有一个“struct”,struct中有一个ISA_BITFIELD宏定义:

图(2)

nonpointer:表示是否对isa指针开启优化,0:是纯isa指针,1:不止是内对象地址,isa中包含了类信息、对象的引用计数等

has_assoc:关联对象的标志,0:没有,1:存在

has_cxx_dtor:该对象是否有C++或者objc的析构器,如果有析构函数,则需要做析构逻辑,如果没有,则可以更快的释放对象

shiftcls:存储类指针的值,开启指针优化的情况下,在arm64架构中有33位用来存储类指针,x86_64_架构的情况下是44位来存储类指针

magic:用来调试器判断当前对象是真的对象,还是没有初始化的空间

weakly_referenced:志对象是否被指向或者曾经指向一个ARCd的弱变量,没有弱引用的对象可以更快释放

deallocating:标志对象是否正在释放内存

has_sidetable_rc:当对象引⽤技术⼤于 10 时,则需要借⽤该变量存储进位

extra_rc:当表示该对象的引用计数值,实际上是引用计数值减一,例如:如果对象的引用计数值为10,那么extra_rc为9,如果对象的引用计数值大于10,则需要使用到has_sidetable_rc

dealloc流程:dealloc -> _objc_rootDealloc -> rootDealloc -> objc_object

dealloc图(1) dealloc图(2)

判断所有的属性isa.nonpointer  &&    !isa.weakly_referenced  &&    !isa.has_assoc  &&    !isa.has_cxx_dtor  &&  !isa.has_sidetable_rc

dealloc图(3)

object_dispose:进行释放

dispose图(1)

下面进行各种标识位数据的释放

图(2)

isa关联类:作用就是关联类,是类的一个属性,是calloc的一个指针和类关联起来,通过newisa.shiftcls = (uintptr_t)cls >> 3,isa= newisa;

图(3)

相关文章

  • 十七、Runtime之(一)isa详解

    1.isa结构 1.1 共用体掩码 ISA_MASK 1.2 isa内结构体位域解释 2.isa总结 isa本...

  • iOS基础知识-类

    从 NSObject 的初始化了解 isa 代替 isa 指针的是结构体 isa_t, 这个结构体中"包含"了当前...

  • iOS - isa的初始化&指向分析

    isa结构及初始化分析 什么是isa,首先我们先看一下isa的结构: 由源码我们可以看出:isa的本质就是一个联合...

  • 面试复习-Runtime相关

    对象内部结构 isa + superclass + method cache + bits isa & bits ...

  • isa的结构

    isa的结构如图所示:它是一个联合体(union),节约内存空间 上图中有一个“struct”,struct中有一...

  • Runtime初始化alloc

    alloc主要是做了isa的初始化,先看下isa_t联合体的结构 初始化完成后的isa结构,从右往左,从上往下看,...

  • 类对象的数据结构?

    类对象的数据结构 类对象就是objc_class 继承自objc_object结构体,包含isa指针。 isa:指...

  • iOS yymodel构造分析

    先看下类对应的结构描述: struct objc_class { Class isa OBJC_ISA_A...

  • iOS联合体、位域

    从 isa 底层结构引入联合体、位域 在isa底层结构分析[https://www.jianshu.com/p/3...

  • 类的结构分析

    isa继续探索 在对象探索-初探isa文章中,简单探索了isa的构成,这篇文章主要将isa之间的关系及类的内存结构...

网友评论

      本文标题:isa的结构

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