首先,类对象也是一种对象,那么它也会有自己的行为,这种行为称作类方法.与一般的类实例一样,类对象也不具备处理类方法的能力,也是要借助isa找到它所属的类,既元类,去调用类方法,类对象本身也是专注于数据的存储和布局形式.可参考类和元类
但与常规的类实例不同,一般而言类对象的字段是固定的.即它默认情况下总是包含isa,super_class,name,version,info,instance_size,ivars,methodLists,cache,protocols.
一个类的数据形式会是如下
而它的数据在内存中的组织形式也是线性的
我们知道,在Objective-C中,我们一般的定义形式是声明一个类的实例变量,属性,实例方法和类方法.并不能声明类变量.所以一般而言类对象的数据形式就是如上图的那些固定的字段.
除了我们介绍的isa,剩余的字段的含义如下:
super_class 指向父类的指针.因为Objective-C借鉴了SimTALK,在类的继承实现上,是通过一条继承链实现的.super_class就是整个继承链的核心字段.
name 类的名字
version 版本
info 信息
instance_size 实例的内存大小
ivars 是一个指向实例变量列表的指针
methodLists 是一个指向实例方法列表的指针
cache 缓存了常用的实例方法
protocols 是一个指向协议列表的指针
我们可以这样简单地去解释运行时的Objective-C的数据结构的含义
对象与实例变量有关,对象自身存储着实例变量
类对象与实例方法有关,实例方法必须通过类对象才能知晓
元类与类方法有关, 类方法必须通过元类才能知晓
对象,类与元类可谓与道教里的三清一般哦~~
运行时的类和对象如下图
一般而言
isa关于对象是什么类
super_class关于继承链
所有元类都有同样的元类,因为他们的isa都指向同一个根元类
转自:http://husbandman.diandian.com/post/2012-08-17/40036035008