Class结构

///

Struct objc_class {

      Class isa;

      Class superclass;

      cache_t cache; //方法缓存

      class_data_bits_t bit;  //用于获取具体的类信息

}

bit & FAST_DATA_MASK ——>

Struct class_rw_t{

    uint32_t flags;

    uint32_t version;

    const class_ro_t * ro;

    method_list_t * methods;  // 方法列表

    property_list * properties ;//属性列表

    const protocol_list_t  * protocols;//协议列表

    Class firstSubclass;

    Class nextSiblingClass;

    Char *demangledName;

}

struct class_ro_t{

    uint32_t  flags;

    uint32_t instanceStart;

    uint32_t instanceSize; //instance对象占用的内存空间

#ifdef __LP64__

    uint32_t  reserved;

#endif

  Const  uint8_t * ivarlayout;

  Const char * name;  //类名

  method_list_t * baseMethodList;

  protocol_list_t * baseProtocols;

  const ivar_list_t * ivars ;  // 成员变量列表

  const uint8_t * waekIvarLayout;

  property_list_t * baseproperties;

}

///


class_rw_t

class_rw_t里面的methods,properties,protocols是二维数组,是可读可写的,包含了类的初始内容,分类内容

///

struct  class_rw_t{

  method_array_t  methods; ——>method_list_ —->method_t

  property_array_t  properties;

  protocol_array_t  protocols;

}

///

Class_ro_t

Class_ro_t里面的baseMethodList,baseprotocols,ivars,baseProperties是唯一数组,是只读的,包含了类的初始内容

///

Struct class_ro_t{

  method_list_t * baseMethodList;———>method_t;

  protocol_list_t * baseProtocols;

const  ivar_list_t * ivars;

property_list_t * baseProperties;

}

///

你可能感兴趣的:(Class结构)