iOS笔记-runtime

runtime概念:

Objective-C是基于C的,为C添加了面向对象的特性。将很多静态语言在编译和链接时期做的事情放到了runtime运行时来处理,可以说runtime是Objective-C幕后工作者

runtime(简称运行时),是一套纯C(C和汇编写的)的API。而OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消息机制。

C语言中,函数的调用在编译的时候回决定调用哪个函数。

OC语言中,函数调用称为消息发送,属于动态调用过程。在编译的时候并不能决定真正调用哪个函数,只有在真正运行的时候才会根据函数的名称找到对应的函数来调用。

事实证明:在编译阶段,OC可以调用任何函数,即使这个函数并未实现,只要声明过就不会报错,只有当运行的时候才会报错,这是因为OC是运行时动态调用的。而C语言调用未实现的函数就会报错。

runtime消息机制

原理:对象根据方法编号SEL去映射表查找对应的方法实现。
\color{red}{每一个OC的方法,底层必然有一个与之对应的runtime方法}

消息机制方法调用流程

  1. OC在向一个对象发送消息时,runtime库会根据对象的isa指针找到该对象对应的类或其父类中查找方法
  2. 注册方法编号(这里用方法编号的好处,可以快速查找)
  3. 根据方法编号去查找对应方法
  4. 找到最终函数实现地址,根据地址去方法区调用对应函数

\color{red}{补充:}每个对象内部都有一个isa指针,这个指针是指向它的真实类型,根据这个指针就能知道调用的是哪个类的方法

runtime常见作用

  • 动态交换两个方法的实现
  • 动态添加属性
  • 实现字典转模型的自动转换
  • 动态添加方法
  • 拦截并替换方法
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1、什么是runtime runtime又叫运行时,将数据类型的确定由编译时推迟到了运行时 是一套比较底层的纯C语...
    蘑菇三十九阅读 453评论 0 0
  • 创建时间: 2016-12-12状态:发布 简介 Runtime又叫运行时,是一套底层C语言的API,是iOS核心...
    LSRain阅读 171评论 0 0
  • 一、runtime简介 RunTime简称运行时。OC就是运行时机制,也就是在运行时候的一些机制,其中最主要的是消...
    chenzhy阅读 495评论 0 51
  • 简介 Runtime简称运行时机制。Objective-C就是运行时机制。也就是在代码编译后运行时的一些机制,其中...
    沈正方阅读 1,222评论 0 2
  • 本文主要介绍Runtime四种使用情况: 1、交换方法2、动态添加方法3、动态添加属性4、日志统计 Objecti...
    小小土豆dev阅读 298评论 0 6

友情链接更多精彩内容