美文网首页
Runtime 中 objc_class , objc_obje

Runtime 中 objc_class , objc_obje

作者: iOS_愛OS | 来源:发表于2018-06-08 11:33 被阅读48次

    objc_class , objc_object, objc_category 结构

    objc_class 结构

    struct object_class{
        Class isa OBJC_ISA_AVAILABILITY;
    #if !__OBJC2__
         Class super_class                        OBJC2_UNAVAILABLE;  // 父类
         const char *name                         OBJC2_UNAVAILABLE;  // 类名
         long version                             OBJC2_UNAVAILABLE;  // 类的版本信息,默认为0
         long info                                OBJC2_UNAVAILABLE;  // 类信息,供运行期使用的一些位标识
         long instance_size                       OBJC2_UNAVAILABLE;  // 该类的实例变量大小
         struct objc_ivar_list *ivars             OBJC2_UNAVAILABLE;  // 该类的成员变量链表
         struct objc_method_list *methodLists     OBJC2_UNAVAILABLE;  // 方法定义的链表
         struct objc_cache *cache                 OBJC2_UNAVAILABLE;  // 方法缓存
         struct objc_protocol_list *protocols     OBJC2_UNAVAILABLE;  // 协议链表
    #endif
    }OBJC2_UNAVAILABLE;
    

    objc_object 结构

    struct objc_object{
         Class isa OBJC_ISA_AVAILABILITY;
    };
    typedef struct objc_object *id;
    
    

    objc_object 中只有一个 isa 变量,可以通过 isa 找到 objc_object 的类 object_class;

    Category : Category是表示一个指向分类的结构体的指针, 定义如下

    typedef struct objc_category *Category
    struct objc_category{
         char *category_name                         OBJC2_UNAVAILABLE; // 分类名
         char *class_name                            OBJC2_UNAVAILABLE;  // 分类所属的类名
         struct objc_method_list *instance_methods   OBJC2_UNAVAILABLE;  // 实例方法列表
         struct objc_method_list *class_methods      OBJC2_UNAVAILABLE; // 类方法列表
         struct objc_protocol_list *protocols        OBJC2_UNAVAILABLE; // 分类所实现的协议列表
    }
    
    

    Category 中没有成员变量 ivars 指针, 所以 Category 中不能添加成员变量

    相关文章

      网友评论

          本文标题:Runtime 中 objc_class , objc_obje

          本文链接:https://www.haomeiwen.com/subject/lvnosftx.html