一、Runtime
- Objective-C是一门动态性比较强的编程语言,跟C、C++等语言有着很大的不同
- Objective-C的动态性是由Runtime API来支撑的
- Runtime API提供的接口基本都是C语言的,源码由C\C++\汇编语言编写
二、isa详解
- 要想学习Runtime,首先要了解它底层的一些常用数据结构,比如isa指针
- 在arm64架构之前,isa就是一个普通的指针,存储着Class、Meta_Class对象的内存地址
- 从arm64架构开始,对isa进行了优化,变成了一个共用体(
union
)结构,还使用位域来存储更多的信息
三、objc_msgSend执行流程
- OC中的方法调用其实都是转换为objc_msgSend函数调用
- objc_msgSend的执行流程可以分为3大阶段
-
消息发送
-
动态方法解析
-
消息转发
-
四、@dynamic
- 提示编译器不要自动生成setter和getter的实现,不要自动生成成员变量
五、super
[super class]
[super superclass]
注:面试题
- 讲一下OC的消息机制
- 消息转发机制流程
- 什么是Runtime?平时项目中有用过吗