很多关于runtime的博客文章都是开篇介绍runtime原理、消息传递机制等等,让好多的同学望而生畏。对于runtime这个强大的略带神秘色彩的独特处理机制,我们需要循序渐进。

刚开始接触runtime,先让我们揭开它的神秘面纱,不去想原理,不要想太多,只是简单的认识一下。

runtime(运行时机制)是什么

runtime是属于OC的底层,是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API,可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)。 在我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者。

举例:

//OC :
[[MJPerson alloc] init]
//runtime :
objc_msgSend(objc_msgSend("MJPerson" , "alloc"), "init")

runtime可以用来做什么

  1. 在程序运行过程中,动态创建一个类(比如KVO的底层实现)
  2. 在程序运行过程中,动态地为某个类添加属性/方法。可以用于封装框架(想怎么改就怎么改) 这就是我们runtime机制的主要运用方向
  3. 遍历一个类中所有的成员变量(属性)/所有方法。(比如字典–>模型:利用runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上;还有归档和接档,利用runtime遍历模型对象的所有属性)

runtime相关头文件和函数

利用头文件,我们可以查看到runtime中的各个方法!

<objc/runtime.h>
<objc/message.h> 

相关函数:

 objc_msgSend : 给对象发送消息class_copyMethodList : 遍历某个类所有的方法class_copyIvarList : 遍历某个类所有的成员变量class_..... 

必备常识

  • Ivar : 成员变量
  • Method : 成员方法

接下来,我们来看看苹果官方文档对于runtime的介绍,不要担心,我已经翻译好了:runtime官方文档翻译

runtime从入门到精通(一)—— 初识runtime相关推荐

  1. runtime从入门到精通(九)—— 万能界面跳转

    由于文章篇幅长度原因,笔者单独用一篇文章来介绍使用runtime来实现万能控制器跳转.查看完整的runtime在实际开发中的使用点击链接 --> runtime从入门到精通(六)-- runti ...

  2. Android Volley入门到精通:初识Volley的基本用法

    1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...

  3. R语言—90分钟从入门到精通

    R语言-90分钟从入门到精通 1. 初识R 1.1 安装R 1.2 R编辑器-Rstudio安装 1.3 更换镜像/安装包/帮助文档 1.3.1 更换镜像 1.3.2 安装包 1.3.3 查看帮助文档 ...

  4. Github教程】史上最全github使用方法:github入门到精通

    [Github教程]史上最全github使用方法:github入门到精通 [初识Github] 首先让我们大家一起喊一句"Hello Github".YEAH!就是这样. Git是 ...

  5. 【Elasticsearch】Elasticsearch:Runtime fields 入门, Elastic 的 schema on read 实现 - 7.11 发布

    1.概述 转载:Elasticsearch:Runtime fields 入门, Elastic 的 schema on read 实现 - 7.11 发布

  6. 【Freeswitch从入门到精通】二、初识Freeswitch

    [Freeswitch从入门到精通]二.初识Freeswitch 1.入门术语 1.1 常见短语 1.2 Call Legs 2.历史 3.启动 4.dialplan 路由表 4.1 测试Demo路由 ...

  7. Python从入门到精通— 初识Python

    Python从入门到精通- 初识Python Python基础知识学习系列博客,持续更新 Python从入门到精通- 初识Python Python从入门到精通- 初识Python 1.Python简 ...

  8. 马克下, 初识 runtime (一)

    转自http://www.cnblogs.com/hepeilin/p/3315966.html 1. 什么是runtime 运行时刻是指一个程序在运行(或者在被执行)的状态.也就是说,当你打开一个程 ...

  9. Java学习从入门到精通-旧版

    为什么80%的码农都做不了架构师?>>>    Java学习从入门到精通-旧版 http://tech.ccidnet.com/art/3737/20051017/465333_1. ...

最新文章

  1. web11 Struts处理表单数据
  2. 机器学习系列3:能量函数分析
  3. Redis的Hash操作
  4. [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
  5. POI导出word带图片及本地测试没问题,在服务器上找不到模板的问题
  6. linux脚本登录启动失败,linux – 在X上运行shell脚本失败登录尝试
  7. dos命令测试网络连通情况
  8. Java修炼之道--I/O
  9. java getCause()与e.getMessage() 异常日志区别
  10. android打包签名
  11. uitextfield长按显示英文select all,copy,paste?
  12. 计算机是怎样跑起来的pdf_程序是怎样跑起来的 -- 通过汇编语言了解程序的实际构成(中篇)...
  13. arduino的串口缓冲区_C#无法从串口Arduino读取完整缓冲区
  14. 三星固态Dell版的960g的sm863a硬盘
  15. ams1117 lm317 对比_LM317和AMS-1117-3.3
  16. 97年大学计算机考试是 级,1997年9月全国计算机等级考试一级笔试试卷 DOS
  17. 系统分析与设计小组项目总结报告
  18. 网站漏洞检测之常见安全问题
  19. 学计算机做纸质笔记,详细图文教你康奈尔大学推荐的超级笔记法,只要一张A4纸张,你也可以做学霸...
  20. 阿里云大数据开发一面面经,已过,面试题已配答案

热门文章

  1. Word 安装Mathtype后无法使用CTRL+C和CTRL+V【一次性解决】
  2. OA系统定制化,企业办公管理需求的新趋势
  3. 新基建下的新机会,任泽平为何看好百度、华为和阿里?
  4. VueRouter导入
  5. 如何解决夜神模拟器连不上adb的问题
  6. MySQL开启定时任务
  7. 2019中信软开社招
  8. mingw-w64安装
  9. 百万年薪python之路 -- MySQL数据库之 完整性约束
  10. 杰理AC692X---U盘播放无损音乐卡顿问题