Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >isa 指针中不同的位代表不同的含义

isa 指针中不同的位代表不同的含义

原创
作者头像
艳艳代码杂货店
修改于 2021-09-26 01:39:45
修改于 2021-09-26 01:39:45
1.1K0
举报

isa 指针占用8字节,64位。64位中不同的位代表不同的含义:

对象与类的 isa 的指向关系

对象.isa -> 类.super -> 父类.super -> 根类.super -> nil

类.isa -> 元类.super -> 父元类.super -> 根元类.super -> 根类.super -> nil

元类.isa = 父元类.isa = 根元类.isa = 根元类

应用:判断对象类型

下面的打印结果是什么:

// [NSObject class] = NSObject

// object_getClass((id)[NSObject class]) = NSObject meta class

// 沿着 NSObject 的继承者链去找根元类 -> 根类 == NSObject meta class 或者 NSObject meta class 的父类的实例

BOOL res1 = [(id)[NSObject class] isKindOfClass:[NSObject class]];

BOOL res2 = [(id)[NSObject class] isMemberOfClass:[NSObject class]];

BOOL res3 = [(id)[TestObject class] isKindOfClass:[TestObject class]];

BOOL res4 = [(id)[TestObject class] isMemberOfClass:[TestObject class]];

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
深入浅出 Runtime(六):相关面试题
目的是将实例和类的相关方法列表以及构建信息区分开来,方便各司其职,符合单一职责设计原则。
师大小海腾
2020/04/16
7220
深入浅出 Runtime(六):相关面试题
Runtime学习:面试题狙击
前面两篇文章分别记录了自己学习 Runtime 的一些知识点以及常见的一些应用。之前立下 flag 说准备写三篇关于 Runtime 的文章,于是就有了这篇文章。
iOSSir
2019/06/21
5690
神经病院Objective-C Runtime入院第一天—isa和Class
我第一次开始重视Objective-C Runtime是从2014年11月1日,@唐巧老师在微博上发的一条微博开始。
一缕殇流化隐半边冰霜
2018/08/30
8220
神经病院Objective-C Runtime入院第一天—isa和Class
图解Objective-C对象模型
MelonTeam
2018/01/04
1.3K0
图解Objective-C对象模型
OC对象模型
可以看出,alloc类方法是开辟了一块内存,生成了一个实例对象,并且对实例对象进行了初始化
Helloted
2022/06/06
6880
OC对象模型
NSObject头文件解析 / 消息机制 / Runtime解读 (一)
上面是NSObject对象的头文件类部分, 可以看到还有一个NSObject protocol 我们也仔细看看都有什么协议方法@protocol NSObjec
周希
2019/10/15
1.3K0
OC-经典面试题分析(一)OC-经典面试题分析(一)
事实上这个方法并不会被调用,而是由llvm处理为调用objc_opt_isKindOfClass这个方法,具体可以打断点或者使用汇编的方式查看(猜测:方便做一些兼容)
用户8893176
2021/08/09
2900
OC-经典面试题分析(一)OC-经典面试题分析(一)
iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)
Tips:苹果公开的源代码在这里可以查,https://opensource.apple.com/tarballs/
陈满iOS
2018/09/10
1.8K1
iOS开发·runtime原理与实践: 基本知识篇(类,超类,元类,super_class,isa,对象,方法,SEL,IMP)
isa 指针走向
作为一个 iOSer, 都知道NSObject 是基类, 肯定都听说过一句话: 万物皆对象, NSObject 类的第一个成员就是 isa 指针, 这个就不展示源码了, 这个指针存着类的很多信息, 而不仅仅是指向类内存的指针.
CC老师
2022/03/15
5880
isa 指针走向
Objective-C Runtime:深入理解类与对象
常说Objective-C是一门动态语言,那么问题来了,这个动态表现在那些方面呢?
Jacklin999
2018/09/12
1.3K0
Objective-C Runtime:深入理解类与对象
判断自己的isa 指向的类是否等于传入的类
isKindOfClass: 判断自己的isa 指向的类是否等于传入的类,不等于的话,找自己的继承连中的父类看有没有等于传入的类,有则YES,没有则NO isMemberOfClass 判断自己的isa 指向的类是否等于传入的类,等于则YES,不等于则NO 源码: // 类对象,是否是指定的元类的实例 + (BOOL)isMemberOfClass:(Class)cls { return object_getClass((id)self) == cls; } // 实例对象,是否是指定的类的实例 - (
艳艳代码杂货店
2021/09/26
5970
[Objective-C Runtime] 类与对象
概述 常说Objective-C是一门动态语言,那么问题来了,这个动态表现在那些方面呢? 其实最主要的表现就是Objective-C将很多静态语言在编译和链接时做的事情放到了运行时去做。 它在运行时实现了对类、方法、成员变量、属性等信息的管理机制,同时,运行时机制为我们开发过程提供很多便利之处,比如: 在运行时创建或者修改一个类; 在运行时修改成员变量、属性等; 在运行时进行消息分发和分发绑定; ...... 与之对应实现的就是Objective-C的Runtime机制。 Runtime基本是C和汇编编写的
Jacklin
2018/05/15
9540
ios开发Runtime详解part1
Runtime是什么? 就像我们开发或者运行java程序需要安装jdk一样,使用Objective-C编写的程序也需要在一个特定的环境下才能运行,这个环境就是Objective-C runtime system, 程序运行的时候可以动态载入类以及向其他的对象发送消息。 由于现在ios开发已经全部需要支持64位了,这里只介绍Objective-C 2.0的runtime, 也被苹果称之为 “现代的运行时(the modern runtime)”, 其新的特性为: 当在runtime中动态改变一个类中的参数后,不需要重新编译这个类的子类。 Runtime能做什么? 鉴于很多文章已经对官方文档进行了翻译,我这里着重总结一下runtime在实际场景下的应用:
Leacode
2018/08/22
3270
面试驱动技术之 - isa && 元类 && 函数调用
以MNPerson为例,里面的成员变量有不同类型是,比如int、double、NSString 类型,假如在C/C++ 中用数组存储,显然是不太合理的
小蠢驴打代码
2019/01/28
9620
面试驱动技术之 - isa && 元类 && 函数调用
super(二) 以及内存分布
在ViewController 书写以下代码。问是否能编译通过,如果可以输出什么是什么?
老沙
2019/09/28
6440
iOS运行时(1)——类(Class)和对象(id)
objc_class结构体内,有一个Class类型的变量叫isa,由上面可以知道Class是一个objc_class指针,因此isa是一个objc_class指针,通常如果在一个objc_object(下面会说到)中,也会有一个isa指针,指向的是这个对象所对应的类(objc_class)。 如果是在objc_class中的isa指针,指向的则是这个类的元类(metaClass)
羊羽shine
2019/05/29
1.1K0
类与对象」NSObject对象的分类
刚开始接触Objective-C语言的时候,看到说到的最多的概念就是「类和对象」。
Jacklin
2020/08/25
7130
类与对象」NSObject对象的分类
ios OC swift run-time isa 指针
@interface Object { Class isa; } Class #if !OBJC_TYPES_DEFINED /// An opaque type that represents an Objective-C class. typedef struct objc_class *Class; /// Represents an instance of a class. struct objc_object { Class _Nonnull isa OBJC_ISA_A
onety码生
2018/11/21
7030
iOS-class方法和objc_getClass方法
根据上一篇博客iOS-class、object_getClass、objc_getClass、objc_getMetaClass区别的研究发现,发现主要还是class方法和objc_getClass方法的区别,因此本篇文章主要讲述一下class方法和objc_getClass方法。
全栈程序员站长
2022/09/07
6330
神奇的Runtime
[receiver message]不是一个简单地方法调用,而是在编译阶段被编译器转化为
Helloted
2022/06/06
6720
神奇的Runtime
相关推荐
深入浅出 Runtime(六):相关面试题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档