iOS面试题02_runtime
2020-09-09 本文已影响0人
LewisZhu
Runtime其实就是c、c++、汇编实现的api,调用OC中的方法,其实就是调用runtime的api方法,进而实现c语言函数的调用。
运行时特性:向编译后的类添加方法,转发消息,交换方法等。
核心功能:1>.把C中的结构体封装成OC中的类。2>.执行OC方法 消息机制 trigger执行c函数。
在程序运行过程中,动态的创建类,动态添加、修改这个类的属性和方法;
遍历一个类中所有的成员变量、属性、以及所有方法
消息传递、转发
![](https://img.haomeiwen.com/i6163725/abe91ed6c600f07f.png)
![](https://img.haomeiwen.com/i6163725/5d1d1dd58018a918.png)
Runtime的内容
![](https://img.haomeiwen.com/i6163725/836c537d3ee91d97.png)
1.数据结构
(1).id就是实例对象 对应runtime中 objc_object结构体
里面的isa指向Class 类对象
(2).Class(类对象)对应runtime中的objc_class结构体---->objc_object
![](https://img.haomeiwen.com/i6163725/dd1bbc1d1059f786.png)
(3).isa指向
![](https://img.haomeiwen.com/i6163725/cd244963329aaab7.png)
2.实例对象,类对象,元类对象
![](https://img.haomeiwen.com/i6163725/3fbac7c5fa8164cc.png)
3.消息传递
![](https://img.haomeiwen.com/i6163725/ceceaf963ce7dfa0.png)
4.消息转发机制(当没有实现方法时候触发)
![](https://img.haomeiwen.com/i6163725/1ce8e841843b0a8c.png)
5.Method Swizzling(交换两个方法的实现)
![](https://img.haomeiwen.com/i6163725/fbbbda31511b14f3.png)
6.动态添加方法
![](https://img.haomeiwen.com/i6163725/8c6ed4801ab8af28.png)