浅谈runtime

谈runtime前,我们先了解下编译时。

编译时:编译器将代码编译成机器可以识别的语言,在编译时候会检查语法。

运行时(runtime):将编译好的代码跑起来,加入内存中。与编译时的静态检查不同,运行时会在内存中做些操作和判断。

我们可以通过三种方式调用runtime:

1、OC层代码:[Instance funA]

2、Framework&Service:isKindOfClass

3、Runtime API:class_getInstanceSize

三种方式通过编译层(llvm)调用到底层的Runtime System Library,可以参照Alloc流程

通过Clang我们可以将OC代码翻译成C,底层实际是通过objc_msgSend来完成消息传递。

43和45行都会调用到sayNB方法。说以在OC层的方法调用中,底层实际是会用到runtime的objc_msgSend来进行消息传递:

对象->isa->方法(类)->cache_t(寻找bucket里的sel和imp)如果没有->methodlist(bits)

在底层通过sel是如何找到imp的呢?我们下一节再详细讲解下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容