美文网首页
iOS 如何获取真正isa指针的地址

iOS 如何获取真正isa指针的地址

作者: 咖啡豆8888 | 来源:发表于2018-09-12 00:28 被阅读129次

isa指针

从runtime源码来看:runtime源码

isa指针底层结构
在arm64位之前,isa指针就是一个普通的指针,储存这Class跟metaClass对象的内存地址,之后对isa进行了优化,变成了一个(union)结构,还使用位域来存储更多信息。

arm64 之后instance获取到class的isa指针的话需要加上一个掩码,具体掩码的值可以在runtime文档中<objc-private.h>中查看ISA_MASK 的宏,这样做的目的就是可以提升运行速率,节省内存开支,(本来是需要用三个bool变量来记录,现在只要一个字节的char就可以达到效果)我们用下面的图片来说明下位域的用法


位运算的用法

下面我们可以使用位域的技术更加精简,我们设定一个结构体来储存我们的值。

联合体union
运用联合体union可以是内部变量共用一块内存,class内部就是使用的union来存储 isa 指针
isa指针内部联合体

所以取值isa地址的时候需要& ISA_MASK才能得到真正的isa地址
shiftcls 是存放class meta-class的地址,位移33位。

isa union中的变量作用

isa内部变量作用

相关文章

  • iOS 如何获取真正isa指针的地址

    isa指针 从runtime源码来看:runtime源码 arm64 之后instance获取到class的isa...

  • runtime面试复习

    runtime isa指针的含义 分为指针型isa:isa的値代表Class的地址,非指针型isa :isa的値的...

  • IOS- 底层原理-类结构分析

    如何打印类信息 通过lldb指令打印类信息 通过isa指针地址 & ISA_MASK*NSObject提供的cla...

  • 4-1 内存管理

    1.内存布局 2.iOS内存管理方案 [isa指针保存了内存管理的信息] 2.iOS内存管理方案 [isa指针...

  • iOS底层之类的结构分析

    从iOS底层之isa结构分析及关联类我们探究了类的实例对象的内存结构,对象指针的首地址存储了isa,也就是存储了类...

  • isa深入解析

    前一篇介绍过isa的优化方式以及从被优化过的isa中获取真正的struct objc_class指针。然而我们对知...

  • isa指向分析

    通过调试父获取isa指针 使用x/4gx person 获取了person对象的16进制的地址。第一个值就是对象的...

  • iOS isa指针

    isa 指针,表示这个对象是一个什么类。而 Class 类型, 也就是 struct objc_class * ,...

  • iOS isa指针

    在Objective-C中,任何类的定义都是对象。类和类的实例没有任何本质上的区别。任何对象都有isa指针。 is...

  • iOS - isa指针

    [toc] 参考 isa指针 isa 简介 isa (is a kind of) 是一个 Class 类型的指针,...

网友评论

      本文标题:iOS 如何获取真正isa指针的地址

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