Objective-C isa 指针

在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。任何对象都有isa指针。

图解(从左向右看 从下向上看):
Objective-C isa 指针_第1张图片
1700455E-C59F-4751-BAFD-177E08CC3104.png

每一个对象本质上都是一个类的实例。其中类定义了成员变量和成员方法的列表。对象通过对象的isa指针指向类。

每一个类本质上都是一个对象,类其实是元类(meteClass)的实例。元类定义了类方法的列表。类通过类的isa指针指向元类。

所有的元类最终继承一个根元类,根元类isa指针指向本身,形成一个封闭的内循环。

根类 有三个指向
根类指向nil
根类是所有类的祖先 其他的都是继承他的
根类作为一个类对象 ,他也有isa指针 isa指针指向根元类

根元类 有四个指向
根元类作为类对象最终继承自根类
isa指针指向自己
是所有元类的祖先
所有元类的isa指针都指向根元类

**通俗版
A的一个实例 名字叫做A_instance
他有一个isa指针 指向的就是这个类的定义A
A作为一个类它继承在ASupper
A作为一个对象他也有isa 指向A的元类 这个元类是没有名字的 或者你可以理解成Ameta
为什么要有这个元类呢?
简单点说就是 节省空间
你可以看到 实例方法存放在类中 类方法存放在元类中
也就是我们对应的-方法 和+方法

参考文章:
https://www.jianshu.com/p/41735c66dccb
http://justsee.iteye.com/blog/2163905

你可能感兴趣的:(Objective-C isa 指针)