标签:
关于“runtime机制”的问题,要深入理解runtime,首先要从最基本的类与对象开始,本文将详细讲解OC中类与对象的结构层次,后续将逐渐更新如何利用runtime操作类。
首先,我们从/usr/include/objc/objc.h 和 runtime.h 中找到对 class 与 object 的定义:
1 // An opaque type that represents an Objective-C class. 2 typedef struct objc_class *Class; 3 /// Represents an instance of a class. 4 struct objc_object { 5 Class isa; 6 }; 7 // A pointer to an instance of a class. 8 typedef struct objc_object *id;
1 struct objc_class { 2 Class isa; // 指向metaclass 3 Class super_class ; // 指向父类 4 constchar *name ; // 类名 5 long version ; // 类的版本信息,初始化默认为0,可以通过runtime函数class_setVersion或者class_getVersion进行修改、读取 6 long info; // 一些标识信息,如CLS_CLASS (0x1L) 表示该类为普通 class ,其中包含实例方法和变量;CLS_META (0x2L) 表示该类为 metaclass,其中包含类方法; 7 long instance_size ; // 该类的实例变量大小(包括从父类继承下来的实例变量); 8 struct objc_ivar_list *ivars; // 用于存储每个成员变量的地址 9 struct objc_method_list **methodLists ; // 与 info 的一些标志位有关,如CLS_CLASS (0x1L),则存储实例方法,如CLS_META (0x2L),则存储类方法; 10 struct objc_cache *cache; // 指向最近使用的方法的指针,用于提升效率; 11 struct objc_protocol_list *protocols; // 存储该类声明遵守的协议 12 }
标签:
原文地址:http://www.cnblogs.com/chenjungang/p/4174910.html