对象
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; // 类对象的数据区域:存放方法、协议、属性
}
}
网友评论