object-c 类结构分析

来源:互联网 发布:程序员累吗 编辑:程序博客网 时间:2024/05/21 01:48

首先,类对象也是一种对象,那么它也会有自己的行为,这种行为称作类方法.与一般的类实例一样,类对象也不具备处理类方法的能力,也是要借助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的数据结构的含义

  1. 对象与实例变量有关,对象自身存储着实例变量

  2. 类对象与实例方法有关,实例方法必须通过类对象才能知晓

  3. 元类与类方法有关, 类方法必须通过元类才能知晓


对象,类与元类可谓与道教里的三清一般哦~~

运行时的类和对象

运行时的类和对象如下图


一般而言

  • isa关于对象是什么类

  • super_class关于继承链

  • 所有元类都有同样的元类,因为他们的isa都指向同一个根元类



  • 转自:http://husbandman.diandian.com/post/2012-08-17/40036035008



0 0
原创粉丝点击