isa和superclass

华大HC32F460串口超时中断+DMA收发实战:从STM32迁移的避坑指南 本文为从STM32迁移至华大HC32F460的开发者提供了串口DMA收发的实战避坑指南。核心在于理解HC32F460以串口接收超时中断替代空闲中断的机制,并调整DMA配置策略:DMA应设置为由串口接收事件持续触发搬运,超时中断仅负责通知和重置DMA,从而实现高效可靠的数据收发。 阅读详情

01isa

三种对象在内存中的结构,他们之间肯定是有联系的

截屏2020-10-19下午8.36.36.png

我们在调用方法的时候本质上是发消息,给这个对象发消息。而对象方法存在类对象中,类方法存在元类对象中,所以他们之间使用了isa来进行连接

  • instance的isa指向class
    当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用

  • class的isa指向meta-class
    当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用

02-class的superclass

很重要牵扯到方法调用,是用来找父类的,
我们首先创建两个类Person 和Student,让他们之间继承,加上NSObject一共会有3个类对象,

@interface Person:NSObject
@end
@interface Student:Person //16
@end

他们之间的关系

类对象之间的联系系

当Student的instance对象要调用Person的对象方法时,会先通过isa找到Student的class,然后通过superclass找到Person的class,最后找到对象方法的实现进行调用

03-meta-class的superclass

元类的superclass之间的关系和作用,Student的元类的superclass指针指向的是Person的元类对象,Person的元类的superclass指针指向的是NSObject的元类对象

元类关系

当Student的class要调用Person的类方法时,会先通过isa找到Student的meta-class,然后通过superclass找到Person的meta-class,最后找到类方法的实现进行调用

04-总结01.

对象之间的isa和superclass之间的关系

instance的isa指向class
class的isa指向meta-class
meta-class的isa指向基类的meta-class

class的superclass指向父类的class
如果没有父类,superclass指针为nil
meta-class的superclass指向父类的meta-class基类的meta-class的superclass指向基类的class

  • instance调用对象方法的轨迹
    isa找到class,方法不存在,就通过superclass找父类

  • class调用类方法的轨迹
    isa找meta-class,方法不存在,就通过superclass找父类,如果找到基类的元类也没有,他回去基类的类对象里面找这个方法,如果还是没有,就会报错 unrecognized selector sent to

05总结02

如果自己的类对象和父类的类对象里面都有test方法,他会先调用自己类的方法,如果自己的类没有就会调用父类的方法,如果父类也没有这个类方法,但是有对象方法,那么它也可以调用成功,因为方法的调用本质就是发消息objc_senMessage(接受者,@selector(name));他只关心给谁发送了哪条消息,并不在乎是-或者+开头的方法

06isa细节

对象isa里面存的地址值就是他所指向的对象的地址,从64bit开始 isa需要进行一次位运算,才能计算出真实地址

isa计算方式
# if __arm64__
#   define ISA_MASK        0x0000000ffffffff8ULL

# elif __x86_64__
#   define ISA_MASK        0x00007ffffffffff8ULL
# else
#   error unknown architecture for packed isa
# endif

如果我们想要看一下person的isa的值, 可以利用lldb调试工具操作,经过我们自己手动进行isa之间的位运算,法相,person的isa&isa_mask之后确实得到的就是Person类对象的地址(isa的地址)

isa计算验证

如果我们想要拿出类对象的isa指针,需要将这个类转成我们自制设计的结构体,因为原来不允许我们访问,所以根据我们计算,类对象和元类的isa也是对应的

类对象的isa和元类的isa

superclass这个指针是不是存在mask运算的,直接可以找到父类类对象的地址

superclass的关系

07class和metaClass的结构

证明类对象里面确实存放了属性信息,对象方法信息,协议信息
因为类对象都是一种objc_class类型的结构,所以这个结构体里面的信息,就说我们类对象在内存中存放的信息,通过我们下载的开源的源码,搜索objc_class找到新的结构体,在objc-runtime-new里面,这个里面的结构体也有继承,因为他是c++的结构体,他和类没有区别,class对象和meta-class对象本质上都是struct objc_class类型

struct objc_class : objc_object {
    // Class ISA;
    Class superclass;
    cache_t cache;             // formerly cache pointer and vtable
    class_data_bits_t bits;    // class_rw_t * plus custom rr/alloc flags

    class_rw_t *data() const {
        return bits.data();
    }
}
//class_rw_t  rw=readwrite t=table

struct objc_class的结构大致为一下内容

objc_class的结构

如果我们想验证一下是否真的是在内存中的结构,我们可以自己模仿他的结构体写一个我们自己的,然后把他们的类对象转成我们自己的结构体进一步验证。
但是如果弄成一样的太耗时间,而且可能编译不通过,所以我们手动改了一些地方;如果我们想编译c++的文件,我们需要把文件后缀改成.mm。c++的结构体可以不带struct直接使用

对象的isa指针指向哪里?
instance对象的isa指向class对象
class对象的isa指向meta-class对象
meta-class对象的isa指向基类的meta-class对象

OC的类信息存放在哪里?
对象方法、属性、成员变量、协议信息,存放在class对象中
类方法,存放在meta-class对象中
成员变量的具体值,存放在instance对象

8 答疑

类对象和元类对象一直在内存中,知道程序结束才释放内存,当程序一启动就分配了内存。
实例对象里面的成员变量是具体的值,类对象里面的成员变量,是成员变量的信息。

掌控板玩板指南1:初识掌控板、扩展板、Mind+编辑器 掌控板、I/O扩展板入门 阅读详情

相关推荐

PaddleOCR在医疗票据识别中的实战:从部署到业务字段提取

本文详细介绍了PaddleOCR在医疗票据识别中的实战应用,重点阐述了其离线部署方案与PP-OCRv3模型选型优势。针对医疗票据敏感数据不出本地的合规要求,文章提供了从环境搭建、模型配置到核心字段提取策略的完整流程,并分享了性能优化与系统集成的实践经验,有效解决了医疗票据自动化录入的难题。

weixin_29271053的博客 236

对象、super、isa、class 和 SuperClass 的理解

super super:是编译器指示符,仅仅是一个标志,并不是指针,仅仅是标志的当前对象去调用父类的方法,本质还是当前对象调用。 super的本质:其实还是当前对象去调用,只不过让当前对象去调用父类方法, super不是父类对象,指的是父类方法。 superclass superclass:获取方法调用者的父类 class class:获取方法调用者的类对象 Q:OC中对...

LIN1986LIN的专栏 2575

因时机器人-灵巧手配置方案(Ubuntu18.04)

因时机器人-灵巧手配置方案(Ubuntu18.04)

CH_monsy的博客 3848

NSObject的isa和superclass区别

这篇博客介绍的就是网上很流行的一张图关于isa和superclass的关系的解释! 温馨提示:如果你没有接触类的对象不了解的话,这篇博客有点费解,建议先看一下深入探究NSObject对象。 一、isa 首先看下面的代码 @interfance GDStudent : GDPerson @interfanceGDPerson:NSObject 我们知道GDStudent的class的内存中存储的有:isa、superclass、对象方法、属性、协议、成员变量 等等。 我们知道GDP...

Lucky_Deng的博客 325

Multisim 11.0的安装破解汉化步骤

15:打开注册机,选择管理员运行,默认第一项,选择生成文件路径,这里不要随意选择,要找到你安装Multisim安装路径下Shard下的License Manager路径下,否则会报错,破解失败。14:后面会出现一个更新提示,选择否,然后选择重启电脑后,先不要选择重启电脑,在这里出现了问题(可能敲击回车,默认去重启电脑了),所以我说不要重启电脑,重启破解时右下角出现这,点击否。17:重启电脑,如果前面重启过,那可以跳过重启,应用程序下找到下图所示,启动。16:点击确认覆盖,路径下生成了该文件。

qq_53260940的博客 2371

深入解析Pytest 底层源码

Pytest 的底层架构是一个基于 pluggy钩子机制的微内核架构。其核心流程是一个固定的链条,链条上的每个环节都通过钩子向外暴露,允许插件介入。这种设计使得 Pytest 极其灵活和强大。启动: 解析配置,加载所有插件(包括核心插件)。收集: 遍历文件系统,发现测试用例,并生成Item对象。执行: 对每个Item,依次执行setup->call->teardown协议。报告: 在整个过程中,通过不同的钩子收集信息,最终生成报告。

monk all the way 619

6 OC中 isa 和 superclass 的总结

一 关于isa 和 superclass 的总结 总结如下: instance 的isa 指向是class class 的isa 指向是metaclass metaclass 的isa指向是基类的imetaclass class 的superclass 指向的是父类的class class如果没有父类,superclass 指向的是nil metaclass 的superclass 指向的是父类的metaclass 基类的metaclass 的superclass 指向的是基类的..

github_36850997的博客 396

信贷模型域——清收阶段模型(贷后模型)

本文深入探讨了信贷模型域中的清收阶段模型(贷后模型),涵盖早期催收模型(C卡)、晚期催收模型、Best Time to Contact模型和回收模型。这些模型通过多维度数据输入,运用分类、回归和生存分析等建模方法,输出关键指标如还款概率、回收率等,广泛应用于银行、资产管理公司和催收外包公司,助力提升回款率、优化资源分配、降低催收成本,并融入贷后风控体系。

庄小焱 653

iOS isa与superclass详解

参考 https://ke.qq.com/course/314526 isa 1.实例对象,类对象,元类对象的内部都有一个isa指针。 2.实例对象的isa指针,指向它的类对象。 3.类对象的isa指针,指向它的元类对象,当调用类方法时,通过类对象的isa找到。 4.元类对象,最后找到类方法的实现进行调用。 5.所有元类对象的isa指针,都指向基类的元类对象。 superclass 1.类对象,元类对象的内部都有一个superclass指针。 2.类对象的superclass指针,指向它的父类对象。 3.元

qq_35734499的博客 434

AI挖矿技术全景解析:从智能勘探到自主开采的2025年度技术演进与产业变革

随着全球关键矿产资源需求激增与开采难度加剧,人工智能(AI)技术正在重塑矿业全生命周期。本文系统综述了2025年AI挖矿技术的最新进展,涵盖从地质勘探、资源评估到自主开采、安全监控的完整技术链条。基于Elsevier 2025年发表的最新研究成果及IEEE会议前沿动态,本文深入分析了深度学习、强化学习、计算机视觉等核心技术在矿物识别、品位预测、设备维护等场景的应用机制。研究数据显示,AI技术已使勘探成功率提升45%,设备停机时间减少35%,整体运营效率提高40%以上。

nmdbbzcl的博客 2082

超硬核实操!DeepSeek 全方位赋能嵌入式工程师,干货满满

摘要:本文聚焦 DeepSeek 大语言模型在嵌入式开发中的实操应用。开篇阐述其在开发前期助工程师精准理解需求、规划架构;代码编写阶段,可生成补全代码、助力算法实现与优化;调试测试时,能定位问题、生成测试用例;学习阶段,帮整理资料、规划学习路径。文中借助 Python 实现与模型交互,提供大量实操流程与代码示例。虽存在不足,但实操彰显其巨大潜力,为嵌入式工程师提供高效工作新思路与全面实操指南。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2001

OC中isa指针与superclass手写笔记总结

OC中isa指针与superclass手写笔记总结

More reading and learning to become excellent 314

基于图像形态学处理的交通灯检测识别matlab仿真

图像形态学处理是基于数学形态学的理论,利用结构元素(如矩形、圆形等)对图像进行处理,通过将结构元素与图像进行特定的逻辑运算,来提取图像中的目标特征、去除噪声、改善图像质量等。在交通灯检测识别中,主要利用交通灯的颜色、形状等特征,通过形态学操作突出这些特征,抑制背景和噪声干扰,从而实现对交通灯的准确检测和识别。图像采集与预处理采集:通过安装在车辆或道路上的摄像头获取交通场景图像。灰度化:将彩色图像转换为灰度图像,减少数据量,便于后续处理。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 160

isa superclass的总结

如下图

majiakun1的专栏 215

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

iOS底层学习——OC对象中的isa和superclass

文章目录对象分类isa和superclass案例分析 对象分类 我们都知道OC对象分为实例对象、类对象、和元类对象 ,那么它们到底存放着哪些信息呢。 实例对象:也就是instance对象,存放着isa,成员变量(值)。 类对象:也就是class对象,存放着isa,superclass,成员变量(名字),属性,对象方法,协议信息 元类对象:也就是mata-class对象,存放着isa,superclass,类方法 由上图我们可以看出对象都包含一个isa,而类对象和元类对象另外还要一个superclass,接

Meet的博客 395

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

OC:对象的isa指针和superclass指针分别指向哪里,你知道了吗?

**1、OC对象的 isa 指针指向哪里?** >1、instance对象的isa指向class对象。 2、class对象的isa指向meta-class对象。 3、meta-class对象的isa指向基类的meta-class对象。

chenzimin_blog 1460

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

iOS底层系列之<3>--isa和superclass

isa和superclass到底是什么?

JH_Cao的博客 435

【无标题】OC对象中的isa指针和superclass指针

搞清楚isa和superclass在对象中的指向

weixin_44762632的博客 182

03-isa指针与superclass指针

NSObject的meta-class对象 superclass指针并非指向于nil,而是指向于NSObject的class对象.isa指针在arm32位直接存储的内容就是class或者meta-class地址信息.大部分meta-class和class对象的superclass指针指向于父类.所有的meta-class的isa指针指向于root-meta-class.class对象的isa指针是指向于meta-class对象.instance对象的isa指针指向于class对象.

得不到的永远是骚栋. 179

OC:对象的isa指针和superclass指针分别指向哪里,你知道了吗?(2)

这次面试问的还是还是有难度的,要求当场写代码并且运行,也是很考察面试者写代码因为Android知识体系比较庞大和复杂的,涉及到计算机知识领域的方方面面。在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。

2401_84520026的博客 407

42_iOS干货29_isa指针和superClass指针的总结

1,isa指针的作用 实例对象instance的isa指向class,当调用对象方法时,通过instance的isa找到class,最后找到对象方法的实现进行调用 类对象class的isa指向meta-class,当调用类方法时,通过class的isa找到meta-class,最后找到类方法的实现进行调用   2,supreClass指针的作用 当Student的class要调用Perso...

a_horse的博客 432

iOS NSObject对象的本质、内存分配、ISA指针及superclass底层源码分析

本篇幅内容较多,但是干货满满,不仅涉及源码分析还涉及模拟系统底层计算分配流程,建议分次食用,耐心看完相信会有很多收获~ 开发中使用最多的就是NSObject对象了,最近深入研究了一番,整理出来比较重要也是自己研究的比深入的几个点,通过源码的角度来分析一下,包括对象的底层实现,以及系统是如何使用内存对齐机制来计算对象大小的,包括isa指针及superclass指针等源码级别的分析,特做记录,以供翻阅回顾。 一 对象的本质 OC中的对象分为三种: 实例对象(instance对象) 存储实例变量的值 类对象(ca

mumubumaopao的博客 639

小码哥iOS学习笔记第三天: isa和superclass

Objective-C中的对象, 主要可以分为3种 instance: 实例对象, 包含 isa和其他成员变量的值, ... class: 类对象, 包含, isa、superclass、属性、对象方法、协议、成员变量的描述, ... meta-class: 元类对象, 包含 isa、superclass、类方法, ... 可以用下图表示每种对象中包含的内容 一、准备代码 准备...

weixin_34185364的博客 200

OC面试题- isa,Superclass,类的基本结构

首先类的本质是C++的struct 类的内存结构 OC对象细分为三类,实例对象(Instance),类对象(Class),元类对象(Meta-Class) 结构图如上 isa 这里才能好好的回答下isa,实例对象的isa指向类对象,类对象的isa指向元类对象,而元类对象的isa指向根元类(一般来说就是NSObject的元类) Superclass Superclass,这也是个指针,指向父类的指针,类对象就是指向父类的类对象,元类对象就是指向父类的元类对象,值得一提的是,所有的Supe..

yokan_de_s的博客 933

isa和superclass,对象的内存分布 -- 类的结构体-1

ios中对象有几种? 实例对象:isa 指针、具体的成员变量的值(自己的公开,私有变量+父类的公开,私有变量),比如age=10,这里存的是10, 类对象:isa、superclass、类属性信息(用class修饰的属性)、对象方法、协议、成员变量列表,这里存的是变量的名字,比如age,也是既有自己的,也有父类的 元类对象:isa、superclass、类方法…… 类对象也是可以有属性...

gcs的博客 443

iOS底层原理总结--instance、class、meta-calss对象的isa和superclass

iOS底层原理总结--OC对象的本质(一) - 掘金 iOS底层原理总结--OC对象的本质(二) - 掘金 iOS底层原理总结--OC对象的分类:instance、class、meta-calss对象的isa和superclass - 掘金 iOS底层原理总结-- KVO/KVC的本质 - 掘金 ... OC对象的分类:instance、class、meta-calss对象的isa和supercl...

weixin_34007020的博客 358
上一篇: OC对象的分类
下一篇: KVO
I微微一笑I
博客等级 码龄11年 0粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值