iOS底层-isa
ios 底层 ISA
2023-06-13 09:17:38 时间
上一篇我们讲到iOS方法的底层的本质是消息!!!这一篇我们分析消息的走态
isa走势图
- Root class (class)其实就是NSObject,NSObject是没有超类的,所以Root class(class)的superclass指向nil。
- 每个Class都有一个isa指针指向唯一的Meta class
- Root class(meta)的superclass指向Root class(class),也就是NSObject,形成一个回路。
- 每个Meta class的isa指针都指向Root class (meta)。
- Root class (meta)的isa指针都指向自己
这里我记录一个重要的点:
- 对象方法存在类里面
- 类方法存在元类里面
- 元类的方法存在根元类
这是非常重要的,如果我们没有捋清楚,就无法得知我们的消息接受者!!!
isa 又是什么? 所谓isa指针,在OC中对象的声明是这样的
对象本身是一个带有指向其类别isa指针的结构体。
当向一个对象发送消息的时候,实际上是通过isa在对象的类别中找到相应的方法。我们知道OC中除了实例方法之外还有类方法,那么类别是否也是个对象呢?
从上面类别的结构看来,类别也是一个对象,它拥有一个指向其父类的指针,和一个isa指针。当一个类别使用类方法时,类别作为一个对象同样会使用isa指针找到类方法的实现。这时,isa指向的就是这个类别的元类。
也就是说
众所周知Objective-C(以下简称OC)中的消息机制。消息的接收者可以是一个对象,也可以是一个类。那么这两种情况要是统一为一种情况不是更方便吗?苹果当然早就想到了,这也正是元类的用处。苹果统一把消息接收者作为对象。等等,这是说,类也是对象?yes,就是这样。就是说,
OC中所有的类都一种对象。由一个类实例化来的对象叫实例对象
,这好理解,那么,类作为对象(称之为类对象)
,又是什么类的对象?当然也容易猜到,就是今天的主题——元类(Metaclass)。现在到给元类下定义的时候了:元类就是类对象所属的类
。所以,实例对象是类的实例,类作为对象又是元类的实例
。已经说了,OC中所有的类都一种对象,所以元类也是对象,那么元类是什么的实例呢?答曰:根元类,根元类是其自身的实例
相关文章
- 备份从android到ios系统文件,如何将音乐从安卓设备转移到iOS设备中「建议收藏」
- AnyTrans 8 for mac(专业的ios数据传输工具)激活版
- 微信小程序 CSS border-radius元素 overflow:hidden失效问题 iPhone ios 苹果兼容问题
- AnyMP4 iOS Cleaner for mac(IOS文件清理工具)v1.0.16激活版
- 理解iOS端的WebView同层组件
- 2022最新整理iOS app上架app详细教程
- iOS AppStore上架流程图文详解2021版 (上)
- iOS底层原理(一):OC对象实际占用内存与开辟内存关系
- IOS – OpenGL ES 图像色调分离噪点效果 GPUImagePosterizeFilter
- iOS 6 的 Smart App Banners 介绍和使用
- ios免费开发者账号
- 深入理解 iOS 开发中的锁详解手机开发
- iOS中对NSArray中自定义的对象进行排序详解手机开发
- iOS字符串NSString常用方法详解手机开发
- ios 获取屏幕的属性和宽度详解手机开发
- iOS——手势操作(nib文件、纯代码)详解手机开发
- iOS—–Crash文件分析(一)详解手机开发
- iOS开发-友盟分享(3)详解手机开发
- 探索Linux系统:在iOS上下载(linux系统ios下载)
- Linux与iOS之间的技术对比(linux和ios)
- Linux技术可以开发IOS系统?(linux能开发ios吗)
- 苹果 iOS/iPadOS 15 开发者预览版 Beta4(19A5307g)发布:改进 Safari 设计,增加 MagSafe 支持等
- 苹果 iOS 15 正式版将限制 Siri 与第三方 App 整合:包括预订打车、待办事项等
- 基于Linux环境下iOS应用开发实践(linux下开发ios)
- iOS 不是 Linux,而是苹果独特操作系统(ios是linux吗)
- iOS开发与Linux的技术融合(ios开发linux)
- iOS 轻松登录 Oracle 数据库(ios 登陆oracle)
- 使用iOS就能操作Oracle数据库(ios上oracle)
- IOS开发之路--C语言预处理