写在前面:刚接触iOS开发时,runtime我们听得很多,感觉很高大上,却又说不出个所以然,今天,我把我自己知道的分享给大家。
首先,说OC是运行时机制,那肯定是有一个比较对象。我们拿C语言和OC作对比。C语言写的代码,在编译的时候就已经决定了某一段代码在运行时就会调用某一个函数;而OC则不同,OC在编译的时候只会检查是否已经定义一个方法,没有实现也不会报错,但是,在运行时,执行某一个只定义未实现的方法就会崩溃。所以说OC是运行时机制。
OC中的方法调用:
任何方法调用本质都是发送一个消息,用runtime发送消息.OC底层就是通过runtime实现的。
方法调用的流程:
OC中的方法可分为类方法和对象方法,对象方法可以再类对象的方法列表中找到, 类方法可以在元类的方法列表中找到。而所有方法都存在于内存的方法区。在这里简单说明一下:
内存的五大区:1.栈 2.堆 3.静态区 4.常量区 5.方法区。
1.栈:不需要手动管理内存,自动管理
2.堆,需要手动管理内存,自己去释放
其他三个凭字面意思理解,我也不是太懂。
方法调用流程:
1.通过isa去对应的类中查找(开发调式过程中,我们都会看到某一个对象的isa指针,就是通过isa指针找到对应的类)
2.注册方法编号(给方法注册编号后,既可以做统计又方便查找。就像我们每个人有自己的身份证号码,学生有学号一样)
3.根据方法编号去查找对应方法
4.找到只是最终函数实现地址,根据地址去方法区调用对应函数