美文网首页
OC中实例对象、类、元类

OC中实例对象、类、元类

作者: 绍清_shao | 来源:发表于2020-04-03 08:42 被阅读0次

对象

OC是C语言的扩展,OC中的对象是由C语言中结构体实现的。2006年苹果发布Objc 2.0

typedef struct objc_class *Class;
typedef struct objc_object *id;

@interface Object { 
    Class isa; 
}

@interface NSObject <NSObject> {
    Class isa  OBJC_ISA_AVAILABILITY;
}

struct objc_object {
private:
    isa_t isa;
}

struct objc_class : objc_object {
    // Class ISA;
    Class superclass;
    cache_t cache;             // formerly cache pointer and vtable
    class_data_bits_t bits;    // class_rw_t * plus custom rr/alloc flags
}

union isa_t 
{
    isa_t() { }
    isa_t(uintptr_t value) : bits(value) { }
    Class cls;
    uintptr_t bits;
}

对象,类,元类之间的关系

代码中🌰表示

NSObject类
@interface NSObject <NSObject> {
 
    // NSObject对象的isa
     objc_class * isa  OBJC_ISA_AVAILABILITY {
         
        // 类的isa 元类
        objc_class * isa  OBJC_ISA_AVAILABILITY {
            objc_class * isa  OBJC_ISA_AVAILABILITY { // 指向类的isa }
            Class superclass; // 指向NSObject对象的isa
            cache_t cache;             // 方法缓存IMP
            class_data_bits_t bits;    // 类对象的数据区域:存放方法、协议、属性
         }
 
         Class superclass;          // nil
         cache_t cache;             // 方法缓存IMP
         class_data_bits_t bits;    // 类对象的数据区域:存放方法、协议、属性
     
     }
 
 
 }
 
 Person类:
@interface Person: NSObject {
 
    // 对象的isa
     objc_class * isa  OBJC_ISA_AVAILABILITY {
         
        // 类的isa 元类
        objc_class * isa  OBJC_ISA_AVAILABILITY {
            objc_class * isa  OBJC_ISA_AVAILABILITY { 指向NSObject类的isa }
            Class superclass; // 指向NSObject类的isa
            cache_t cache;             // 类方法缓存IMP
            class_data_bits_t bits;    // 类的数据区域:存放方法、协议、属性
         }
 
         Class superclass;          // 指向NSObject对象的isa
         cache_t cache;             // 方法缓存IMP
         class_data_bits_t bits;    // 类对象的数据区域:存放方法、协议、属性
     
     }
 
 
 }
 
 Man类
 @interface Man: Person {
 
    // 对象的isa
     objc_class * isa  OBJC_ISA_AVAILABILITY {
         
        // 类的isa 元类
        objc_class * isa  OBJC_ISA_AVAILABILITY {
            objc_class * isa  OBJC_ISA_AVAILABILITY { 指向NSObject类的isa }
            Class superclass; // 引用对象的isa
            cache_t cache;             // 类方法缓存IMP
            class_data_bits_t bits;    // 类的数据区域:存放方法、协议、属性
         }
 
         Class superclass;          // Person对象的isa
         cache_t cache;             // 方法缓存IMP
         class_data_bits_t bits;    // 类对象的数据区域:存放方法、协议、属性
     
     }
 
 
 }

相关文章

网友评论

      本文标题:OC中实例对象、类、元类

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