isa详解

作者: 海浪萌物 | 来源:发表于2019-12-20 14:28 被阅读0次

接上一篇文章

一、isa初始化流程

image.png

我们可以看大在alloc时候会将类右移三位后保存在isa.shiftcls里面

首先我们发现object_getClass函数其实就是去除对象的isa功能 image.png
进到getIsa函数 image.png
因为主要都是走第一行 if (!isTaggedPointer()) return ISA()
我们进到ISA()函数中看看
image.png
我们看到 image.png
SUPPORT_INDEXED_ISA一般都是0,所以返回的是 image.png

我们在看下isa的结构


image.png

其中ISA_MASK的值是


image.png
这是从isa指针中取出类对象

验证流程:

1576770136344.jpg
我们先通过x/4gx object 命令拿到object对象的前4个属性的内存地址,首先我们确定的是对象的第一个属性必然是isa,因为所以对象都是继承NSObject,NSObject里面第一个就是isa成员变量 image.png

在上面我们发现取isa时候是isa.bits & ISA_MASK

我们拿取到的isa地址和ISA_MASK与一下得到结果:

(lldb) p/x 0x001d800100001131 & 0x00007ffffffffff8ULL
(unsigned long long) $1 = 0x0000000100001130

然后再拿到object类的地址

(lldb) p/x LGPerson.class
(Class) $2 = 0x0000000100001130 LGPerson

我们会发现得到的两个值是一样的

相关文章

  • isa详解

    接上一篇文章 一、isa初始化流程 我们可以看大在alloc时候会将类右移三位后保存在isa.shiftcls里面...

  • ISA 详解

    [TOC] 一. 认识ISA指针 isa:是一个Class 类型的指针. 每个实例对象有个isa的指针,他指向对象...

  • isa详解

    在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的内存地址。从arm64...

  • isa详解

    在arm64架构之前,isa就是一个普通的指针,存储着Class或Meta-Class对象的内存地址。arm64架...

  • isa详解

    右边数第二位是1与has_assoc相对,说明有关联对象

  • isa详解

    前言 通过上一篇文章《iOS对象的本质》[https://www.jianshu.com/p/e2acdec085...

  • isa 详解

    在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的内存地址 从arm64...

  • iOS Runtime详解及应用场景

    一 runtime简介 二 Class的结构 三 isa指针详解 四 method详解 五 方法调用及消息转发流程...

  • Runtime 消息发送

    1、isa 详解 isa 在 arm64 架构之前就是一个普通的指针,存储着 Class、Meta-Class 对...

  • isa分析

    isa详解 在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta-Class对象的内存地址 ...

网友评论

      本文标题:isa详解

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