类和元类的本质都是这个objc_class。
objc_class的结构如下:
struct objc_class{
Class isa;
Class superclass;
Cache_t cache;
class_data_bits_t bits
};
所以,一个objc_class结构体中包含了一个isa指针,一个父类指针,方法列表缓存,以及class_data_bits_t对象。
那么calss_data_bits_t对象又是啥东西呢?根据objc源码可以查询到,class_data_bits_t的结构体方法返回了class_rw_t指针。
class_rw_t的结构如下:
struct class_rw_t{
unit32_t flags;
unit32_t version;
const class_ro_t *ro;
menthod_list_t *menthods;
proprety_list_t *propreties;
const protocol_list_t * protocol;
Class firstsubclass;
Class nextSibingclass;
char * demangledname;
}
这个结构体其中包括了我们常用的方法列表,属性列表,协议等。以及一个class_ro_t指针。
class_ro_t结构如下:
struct class_ro_t{
unit32_t flags;
unit32_t instancestart;
unit32_t instancesize;
#ifdef _ _LP64_ _
unit32_t reserved;
#endif
const unit8_t ivarlayout;
const char *name;
menthod_list_t *basementhods;
const proprety_list_t *basepropreties;
protocol_list_t *baseprotocols;
const ivar_list_t *ivars;
const unit8_t *weakivarslayout;
}
网友评论