IOS面试题(Runtime) ---runtime基础

OC面试题目合集地址

问题1: 什么是Runtime

runtime 是由CC++ 汇编实现的一套API,为OC语言加入了面向对象运行时的功能。是一种运行机制。平时编写的OC代码,在程序运行过程中,其实最终会转换成Runtime的C语言代码,Runtime 是 Objective-C 的幕后工作者。



问题2: 方法的本质是什么?

  • 方法的本质: 发送消息 objc_msgSend
  • 关键方法:lookUpImpOrForward

消息会有以下几个流程

  • 快速消息查找, 从 cache_t 缓存查找目标函数。
  • 慢速消息查找lookUpImpOrForward 递归 自身链, 找不到去父类缓存中找,依然找不到会 递归父类链继续查找
  • 查找不到消息进行动态方法解析 resolveInstanceMethod / resolveClassMethod . resolveClassMethod 的过程中如果没有找到方法,会调用 resolveInstanceMethod
  • 消息快速转发 forwardingTargetForSelector, 相当于找消息备用接收者
  • 消息慢速转发 methodSignatureForSelector & forwardInvocation, 在仍然没有解决问题后在methodSignatureForSelecto r的时候会再进行一次慢速消息查找(这次不进行消息转发)
  • 都找不到报如下错, 并crash
unrecognized selector sent to instance XXX

SEL & IMP是什么? 以及两者之间的关系?

SEL : 是方法编号 , 在read_images期间就编译进入了内存
IMP: 是函数实现指针 ,

找 imp 就是找函数的过程 sel 就相当于书本的目录 tittle
imp 就是书本的⻚码 查找具体的函数就是想看这本书里面具体篇章的内容

  • 我们首先知道想看哪一个tittle (sel)
  • 根据目录对应的⻚码 (imp)
  • 翻到具体的内容



©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容