在Objective-C中,任何类的定义都是对象。类和类的实例(对象)没有任何本质上的区别。任何对象都有isa指针。
图解(从左向右看 从下向上看):
每一个对象本质上都是一个类的实例。其中类定义了成员变量和成员方法的列表。对象通过对象的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
网友评论