iOS开发心得iOS额外知识iOS_OC类与对象的本质

OC-底层实现isa指针

2017-06-09  本文已影响1050人  iOS开发周立贺
/// An opaque type that represents an Objective-C class.
typedef struct objc_class *Class;
/// A pointer to an instance of a class.
typedef struct objc_object *id;
/// Represents an instance of a class.
struct objc_object {
    Class isa  OBJC_ISA_AVAILABILITY;
};
struct objc_class {
    Class isa  OBJC_ISA_AVAILABILITY;   //isa指针,指向metaclass(该类的元类)
    
#if !__OBJC2__
    
    Class super_class   //指向objc_class(该类)的super_class(父类)
    
    const char *name    //objc_class(该类)的类名
    
    long version        //objc_class(该类)的版本信息,初始化为0,可以通过runtime函数class_setVersion和class_getVersion进行修改和读取
    
    long info           //一些标识信息,如CLS_CLASS表示objc_class(该类)为普通类。ClS_CLASS表示objc_class(该类)为metaclass(元类)
    
    long instance_size  //objc_class(该类)的实例变量的大小
    
    struct objc_ivar_list *ivars    //用于存储每个成员变量的地址
    
    struct objc_method_list **methodLists   //方法列表,与info标识关联
    
    struct objc_cache *cache        //指向最近使用的方法的指针,用于提升效率
    
    struct objc_protocol_list *protocols    //存储objc_class(该类)的一些协议
#endif
    
} OBJC2_UNAVAILABLE;

值得注意的是:


作用:


上一篇下一篇

猜你喜欢

热点阅读