1、数据结构
共用体isa
- 对象的isa指向类对象
- 类对象的isa指向元类对象
cache_t
- 用于快速查找方法执行函数
- 可增量扩展的哈希表结构
- 局部性原理的应用
class_data_bits_t
- class_data_bits_t 主要是对class_rw_t的封装
- class_rw_t代表了类相关的读写信息、对class_ro_t的封装
- class_ro_t代表了类相关的只读信息
class_rw_t
method_t
2、类对象与元类对象
- 类对象存储实例方法列表等信息
- 元类对象存储类方法列表等信息
3、消息传递
void objc_msgSend(void /* id self, SEL op, ....*/)
[self class] <=> objc_msgSend(self. @selector(class))
void objc_msgSendSuper(void /* struct objc_super *super, SEL op, ...*/)
struct objc_super {
__unsafe_unretained id receiver;
}
[super class] <=> objc_msgSendSuper(super, @selector(class))
4、方法缓存查找
以SEL为可以,通过hash查找具体IMP
当前类中查找
1、对于已排序的方法列表,采用二分查找 2、对于未排序的方法列表,采用一般遍历
5、消息转发
6、Method-Swizzling
7、动态添加方法
class_addMethod(self, @selector(deletionMethod), addedMethod, "v@:");
8、动态方法解析
@dynamic
- 动态运行时语言将函数决议推迟到运行时
- 编译时语言在编译器进行函数决议