6 OC中 isa 和 superclass 的总结

android技术--------如何解决弹出键盘只影响当前fragment输入的窗口 题目比较长,也可能有很多人不明所以这东西有啥可写的,简单来说就是实现近似于Android Pad 上QQHD聊天的界面效果,搞了很长的事件,今天终于搞定。 android3.0新加了组件Fragment称之为碎片,对这个一无所知的请自觉补习。今天的阐述将基于此组件。 fragment可以放入activity中,并随activity的生命周期变化而变化,但当相应键盘事件的时候,就比较让人挠头了, 阅读详情

目录

一 关于isa 和 superclass 的总结

二  为什么基类的metaclass 的superclass 指向的是基类的类

三  isa 的细节问题


 

总结如下:

 

  1. instance 的isa 指向是class
  2. class 的isa 指向是metaclass
  3. metaclass 的isa指向是基类的imetaclass
  4. class 的superclass 指向的是父类的class
  5. class如果没有父类,superclass 指向的是nil
  6. metaclass 的superclass 指向的是父类的metaclass
  7. 基类的metaclass 的superclass 指向的是基类的类

 

1 所以实例对象方法的调用轨迹是

isa 找到class,通过superclass 一直往上寻找,直到找到对应的方法,如果找不到,就结束,抛出异常

 2 类对象方法调用的轨迹是

isa 找到metaclass,方法不存在,通过superclass 一直寻找,如果找不到,就结束,抛异常

 

 

二  为什么基类的metaclass 的superclass 指向的是基类的类

 

Person 类的类方法和 NSObject 类的类方法都没有实现,但是Person 类 和 NSObject 调用类方法却没有崩溃产生?

从上图可以看出来

正式因为metaclass的superclass 指向的是基类的类,因为基类中有同名的test 方法,所以没有崩溃产生。

因为代码的本质是

[Person test];

objc_msgsend([Person class],@selector(test));

只是告诉给这个类发送消息,调用test方法,并没有告知是+ 方法 或者 - 方法

oc 调用方法的本质就是通过方法名字去寻找,不会区分类方法和实例对象方法

 


#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface NSObject (Test)


+ (void)test;

@end

NS_ASSUME_NONNULL_END


#import "NSObject+Test.h"

@implementation NSObject (Test)


//  不实现NSObject 类的 类方法 test

//
//+ (void)test{
//
//    NSLog(@"+[Person test] -- %p",self);
//}


// 但是实现NSObject 的对象方法
- (void)test{
    
    NSLog(@"-[Person test] -- %p",self);
}




@end
#import <Foundation/Foundation.h>
#import "NSObject+Test.h"

@interface Person : NSObject

+ (void)test;


@end

@implementation Person

//  不实现person 类的 类方法 test

//+ (void)test{
//
//    NSLog(@"+[Person test] -- %p",self);
//}


@end
 


int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
               
        [Person test];
        [NSObject test];
    }
    return 0;
}

 

三  isa 的细节问题

 

实例对象的isa 指向 class,那么isa 中存在的地址值是否就是class 的地址值呢?

其实在64位以前,确确实实isa的中存在的地址值就是class的地址值,但是在64位以后,要进行一次与运算,才能获取class 的地址值

 

但是superclass 指针是不存在这个问题的

 

 

 

 

akshare 布林通道策略 import datetime import pandas as pd import backtrader as bt import matplotlib.pyplot as plt from datetime import datetime import matplotlib import akshare as ak %matplotlib inline class Boll_strategy(bt.Strategy): #自定义参数,每次买入1800手 params=(('size'. 阅读详情

相关推荐

开放平台 - 互动玩法演进之路

随着直播业务和用户规模日益壮大,如何丰富直播间内容、增强直播间内用户互动效果,提升营收数据变得更加关键。

bilibili_TC的博客 1739

OC中的类与元类

注:我们引用apple开源代码中objc4-750中的相关源代码定义。 OC中的对象是类的实例化出来的,这个我们都能理解。可是元类是什么,元类存在的意义是什么? 首先我们来看一下OC中关于对象的实现定义, 在对象结构体中居然只有一个Class类型的isa指针,那么对象的实例方法和成员变量放在哪里呢?因为只有一个isa指针,所以我们也只能从isa中去搜一下。下边我们看一下class的实现,...

王二东的博客 1073

告别License烦恼:手把手教你用VS Code+Cppcheck搭建免费的MISRA-C代码检查环境

本文详细介绍了如何使用VS Code和开源工具Cppcheck搭建免费的MISRA-C代码检查环境,帮助开发者规避商业工具的高额License费用。通过四步环境搭建和实战技巧,实现高效的代码静态检查,提升嵌入式开发的安全性和可靠性。

weixin_42523326的博客 248

iOS Isa、Superclass、类、元 -- 对象的本质、内部原理

OC对象 主要分三种: instance 对象(实例对象) class 对象(类对象) meta-class 对象 (元类对象) 1:一个实例对象 在内存中存储的信息:isa指针、其他变量(这个是成员变量的值,比如说,self.age = 10, 10放在里面) 2:类对象 NSObject *objec1 = [[NSObject alloc] init]; N...

qq_27909209的博客 691

从 0 到 1:基于深度学习的图像识别系统开发实战

图像识别是指让计算机能够识别和理解图像中的内容,通常是通过计算机视觉技术来实现。深度学习,尤其是卷积神经网络(CNN),已经成为图像识别中最为流行和有效的技术。数据采集和预处理:获取并处理图像数据,使其适合于模型训练。模型训练:使用深度学习算法(如 CNN)训练模型,以学习图像中的特征。模型评估与优化:评估模型的性能,并通过调整超参数、优化算法等方法提高精度。模型部署与应用:将训练好的模型应用于实际的图像识别任务中。本文将带领你通过一个简单的图像分类问题,开发一个深度学习图像识别系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1218

功能安全实战系列12-英飞凌TC3xx锁步核及其自检开发

本文介绍了英飞凌Tricore系列芯片的锁步核(Lockstep Core)功能及其故障注入自检机制。锁步核通过主核和检查核同步执行指令,并比较输出结果来检测硬件故障。文章详细阐述了锁步核的工作原理、使能配置方法以及故障注入自检的实现过程。故障注入测试通过专用寄存器LCLTEST触发,系统会定期自动测试比较器节点,验证锁步核的故障检测能力。当检测到异常时,会触发SMU模块的警报机制。该技术为汽车电子系统提供了重要的功能安全保障。

initiallizer的博客 920

OC中的super与superclass

一般解释如下 // class: 获取方法调用者类 // superclass: 获取方法调用者 父类 // super:super不是一个指针,super只是编译指示器 // super: 仅仅是让方法调用者去调用父类方法 复制代码这段解释看起来很简单,但是实际中很容易用错,尤其容易混淆的是super的用法. super实际上是让某个类自己去调用父类的方法,而不是父类去调用某方法; 比如...

weixin_34335458的博客 206

WebRTC之beamforming算法

CSND已永久停更,最新版唯一来源点击下面链接跳转: 语音增强和语音识别网页书 坐标问题 这里以笔记本为例进行说明,当笔记本按如下方式打开: 首先是键盘和液晶屏呈90度,然后鼠标上方,也就是液晶屏上方正中间是camera,把平行于键盘的面看成是xy平面,把液晶屏所在的面看成是xz平面,所有平面的原点都在Camera的位置。 方位角:从原点开始,Camera的右侧是0度,逆时针方...

shichaog的专栏 1万+

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

isa和superclass到底是什么?

JH_Cao的博客 435

RK3568 低功耗设计全解析:DVFS 策略与 PMIC 电源管理

本文深入解析RK3568处理器的低功耗优化方案。从硬件架构分析入手,阐述四核Cortex-A55的功耗特性及分层电源域设计。重点介绍DVFS动态调压调频技术,包括Linux内核配置方法及场景化策略设计。详细讲解RK809 PMIC的电源管理优化,提供外设电源域控制与休眠唤醒配置的实战案例。通过智能终端应用实例,展示待机功耗从280mA降至65mA的优化效果,并推荐功率测试工具。文章强调需要平衡性能与功耗,结合场景定制策略,并指出AI负载预测等未来优化方向,为RK3568开发者提供系统性的低功耗解决方案。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 2073

Sigrity System SI SerialLink模式进行Pcie3协议仿真分析操作指导-pcie3_client_single_pre

Sigrity System SI SerialLink模式提供了10个协议合规性检查工具模板,用户可以将根据实际应用替换模板中的SPICE文件,然后进行协议仿真分析,同时软件还提供了目标结果的模板MASK以及该协议需要检查的项目,通过协议分析视为满足设计要求,下面介绍pcie3_client_single_pre仿真分析,具体操作如下。Random(Rj):随机抖动,该抖动用高斯概率分布来描述,通常是由热噪声和其它随机噪声引起的,默认为1.24%UI RMS(平均值),即和标准值的偏差为1.24%UI。

weixin_54787054的博客 598

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

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

chenzimin_blog 1460

Android16 自定义HAL层适配一些VINTF和SELINUX问题修改

在RK里面一般权限矩阵在/rockchip/common/manifests/目录,我这版Android16的代码比较特殊,这里重点修改/device/rockchip/rockchip_generic/manifests/frameworks_compatibility_matrix.xml这个文件,不同的版本注册方式不同,在。hal_ruip_default.te,hal_ruip.te,attributes文件。拓展策略的方式添加,但是在Android16里面发现用不了。发现HAL层服务注册成功了。

tzj1058756809的博客 242

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

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

LIN1986LIN的专栏 2575

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

More reading and learning to become excellent 314

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

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

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

Meet的博客 395

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

2401_84520026的博客 407

OC对象 - isa指针和supperClass

如果没有父类,supperclass指针位nil。

sharp521的博客 793

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

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

weixin_44762632的博客 182

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

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

yokan_de_s的博客 933

OC NSObject和isa

1、一个NSObject对象占多少个内存? 答:系统会分配16个字节给NSOobject对象(可通过malloc函数获得);但是NSObject内部只用了8个字节空间(64bit环境下)(可通过classgetinstancesize函数获得)。 2、对象的isa指针指向哪里? 答:OC中对象分三种:1、instance(实例对象),通过alloc创建;2、class(类对象),通过class方法...

qq_32940999的博客 330

oc底层原理再总结

oc底层原理学习1、oc的本质是什么2、instance 对象是什么3、Class对象原理是什么4、meta-class对象5、isa指针指向哪里参考文章: 1、oc的本质是什么 本质就是就是一个结构体,这个结构体里面包含一个isa指针,以及一些成员变量\color{red}{这个结构体里面包含一个isa指针,以及一些成员变量}这个结构体里面包含一个isa指针,以及一些成员变量。 class_ge...

探究苹果技术原理和学习新技术(锲而舍之,朽木不折;锲而不舍,金石可镂。) 1011

iOS底层原理总结--OC对象的分类: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和superclass O...

u012179233的博客 1149

OC对象的本质(下)

1、Instance实例对象内部存贮的是什么? (1)、isa 指针 (2)、其他成员变量 2、类对象在内存中存储的信息主要包含: (1)、isa指针 (2)、superClass指针 (3)、类的属性信息(@property)、类的对象方法信息(instance medth)也就是实例方法 (4)、类的协议信息(@protocol)、类的成员变量信息(ivar)(比...

u011534162的专栏 234

OC关于isa指针的一些总结

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

SuperChaoXu的博客 207

isa指针

对象的isa指针指向哪里? OC的类信息存放在哪里?

tanxianbo的博客 409
上一篇: 5 OC 中的三种对象
下一篇: 7 OC 中class 类的结构
Leonardo_Fibonacci
博客等级 码龄10年 110粉丝 247原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值