We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
这部分也可以看下我的博客《iOS Runtime源码解析重要的数据结构介绍》
struct objc_class : objc_object { Class superclass; cache_t cache; class_data_bits_t bits; }
objc_class 也是个对象,它继承自objc_objc 所以它也有一个isa,这个isa 指向的是元类对象,至于元类对象是干啥用的后面会提:
superclass :用于指向当前类的父类,根类NSObject的superclass为nil。
cache:方法缓存凡是向这个类的某个对象发送了某个消息,这个消息对应的方法就从class_data_bits_t中找到,然后添加到方法缓存中,每次在调用方法的时候都会先从这里查找有没有,如果没有了才会去class_data_bits_t 里面的方法列表中查找。
bits:这里存放着类的关键信息,最重要的是class_rw_t ,它包含类的方法列表,属性列表,协议列表等信息,这部分是可变的,在Runtime初始化的时候会将分类中的方法,属性等信息添加到这部分,同时class_rw_t还包括了class_ro_t,这部分是不可变的,在编译的时候就已经确定了,它包含了方法,属性,协议,实例变量,对象起始位置等信息。这部分信息最终会被添加到class_rw_t中。
元类对象
元类对象结构也是objc_class和类对象不同的是它存储的是类方法。它的根superclass 不是nil,而是指向NSObject. 它也有isa,它的isa指向根元类对象,根元类对象的isa指向自身。
这部分有个关键图 大家要十分熟悉:
The text was updated successfully, but these errors were encountered:
No branches or pull requests
这部分也可以看下我的博客《iOS Runtime源码解析重要的数据结构介绍》
类对象结构如下所示:
objc_class 也是个对象,它继承自objc_objc 所以它也有一个isa,这个isa 指向的是元类对象,至于元类对象是干啥用的后面会提:
superclass :用于指向当前类的父类,根类NSObject的superclass为nil。
cache:方法缓存凡是向这个类的某个对象发送了某个消息,这个消息对应的方法就从class_data_bits_t中找到,然后添加到方法缓存中,每次在调用方法的时候都会先从这里查找有没有,如果没有了才会去class_data_bits_t 里面的方法列表中查找。
bits:这里存放着类的关键信息,最重要的是class_rw_t ,它包含类的方法列表,属性列表,协议列表等信息,这部分是可变的,在Runtime初始化的时候会将分类中的方法,属性等信息添加到这部分,同时class_rw_t还包括了class_ro_t,这部分是不可变的,在编译的时候就已经确定了,它包含了方法,属性,协议,实例变量,对象起始位置等信息。这部分信息最终会被添加到class_rw_t中。
元类对象
元类对象结构也是objc_class和类对象不同的是它存储的是类方法。它的根superclass 不是nil,而是指向NSObject. 它也有isa,它的isa指向根元类对象,根元类对象的isa指向自身。
这部分有个关键图 大家要十分熟悉:
The text was updated successfully, but these errors were encountered: