Runtime

2020-05-11  本文已影响0人  CoderHong

OC中的id类型

id的类型定义

typedef struct objc_object *id

struct objc_object在runtime中定义

struct objc_object {
    Class isa;
};

NSObject底层的数据结构体

struct NSObject_IMPL {
    Class isa;
};

Foundation框架中自定义的类基本继承NSObjec 因此实例对象第一个成员都是isa指针 这样就可以通过struct objc_object *类型指针指向继承NSObject类的实例对象访问isa 这样是内存安全的

OC中的Class类型

Class类型定义

typedef struct objc_class *Class;

Class类型是指向struct objc_class类型的指针
struct objc_class在Runtime源码定义

struct objc_class : objc_object {
  Class superclass;
  cache_t cache;
  class_data_bits_t bits;
  
  class_rw_t *data() const {
       return bits.data();
   }
}

所谓的类对象、元类对象的底层结构都是struct objc_class

上一篇下一篇

猜你喜欢

热点阅读