在进入理解 isa
何为Runtime
- Objective-C 是一门动态语言。即将数据类型的确定由编译时,推迟到了运行时。简而言之就是运行时机制使得系统知道运行时才去决定一个对象的类别,已经调用该类别对象指定的方法
- runtime 简称运行时,是一套底层的 C 语言 API,是 iOS 系统的核心之一。
- 在Objective-C中,任何类的定义都是对象(实例)。类和类的实例没有本质上的任何区别。任何对象都有 isa 指针。
isa
何为isa
- isa:是类指针。之所以说isa是指针是因为Class其实是指向objc_class结构体的指针,而 isa 是它的唯一的私有成员变量。那么可以说所有的对象都有isa指针(isa 位置在成员变量的第一个)。
1、objc_object中的isa 指的是对象的类(Class);
2、objc_class中的isa只的是类的元类;
3 、 superClass是一层层集成的,到最后NSObject的superClass是nil.而NSObject的isa指向根元类,这个跟元类的isa指向它自己,而它的superClass是NSObject,也就是最后形成一个环,这个环让我想起了先有鸡还是先有蛋的问题.
4、 mateClass也是相互继承的.
5 、这个逻辑就想着objc_class的struct,里面有个isa属性,还有个super_class属性,他俩都是指针,其实在objc_class的定义中也能看出来,每一个objc_class都有isa,但是不一定会有super_class,近三天每天想一次.
对象的isa指针指向类,类对象的isa指针指向元类,元类对象的isa指针指向根元类,根元类的isa指针指向他本身。
网友评论