runtime从入门到精通(一)—— 初识runtime
很多关于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可以用来做什么
- 在程序运行过程中,动态创建一个类(比如KVO的底层实现)
- 在程序运行过程中,动态地为某个类添加属性/方法。可以用于封装框架(想怎么改就怎么改) 这就是我们runtime机制的主要运用方向
- 遍历一个类中所有的成员变量(属性)/所有方法。(比如字典–>模型:利用runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上;还有归档和接档,利用runtime遍历模型对象的所有属性)
runtime相关头文件和函数
利用头文件,我们可以查看到runtime中的各个方法!
<objc/runtime.h>
<objc/message.h>
相关函数:
objc_msgSend : 给对象发送消息class_copyMethodList : 遍历某个类所有的方法class_copyIvarList : 遍历某个类所有的成员变量class_.....
必备常识
- Ivar : 成员变量
- Method : 成员方法
接下来,我们来看看苹果官方文档对于runtime的介绍,不要担心,我已经翻译好了:runtime官方文档翻译
runtime从入门到精通(一)—— 初识runtime相关推荐
- runtime从入门到精通(九)—— 万能界面跳转
由于文章篇幅长度原因,笔者单独用一篇文章来介绍使用runtime来实现万能控制器跳转.查看完整的runtime在实际开发中的使用点击链接 --> runtime从入门到精通(六)-- runti ...
- Android Volley入门到精通:初识Volley的基本用法
1. Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系统中主要提供了两种方式来进行H ...
- R语言—90分钟从入门到精通
R语言-90分钟从入门到精通 1. 初识R 1.1 安装R 1.2 R编辑器-Rstudio安装 1.3 更换镜像/安装包/帮助文档 1.3.1 更换镜像 1.3.2 安装包 1.3.3 查看帮助文档 ...
- Github教程】史上最全github使用方法:github入门到精通
[Github教程]史上最全github使用方法:github入门到精通 [初识Github] 首先让我们大家一起喊一句"Hello Github".YEAH!就是这样. Git是 ...
- 【Elasticsearch】Elasticsearch:Runtime fields 入门, Elastic 的 schema on read 实现 - 7.11 发布
1.概述 转载:Elasticsearch:Runtime fields 入门, Elastic 的 schema on read 实现 - 7.11 发布
- 【Freeswitch从入门到精通】二、初识Freeswitch
[Freeswitch从入门到精通]二.初识Freeswitch 1.入门术语 1.1 常见短语 1.2 Call Legs 2.历史 3.启动 4.dialplan 路由表 4.1 测试Demo路由 ...
- Python从入门到精通— 初识Python
Python从入门到精通- 初识Python Python基础知识学习系列博客,持续更新 Python从入门到精通- 初识Python Python从入门到精通- 初识Python 1.Python简 ...
- 马克下, 初识 runtime (一)
转自http://www.cnblogs.com/hepeilin/p/3315966.html 1. 什么是runtime 运行时刻是指一个程序在运行(或者在被执行)的状态.也就是说,当你打开一个程 ...
- Java学习从入门到精通-旧版
为什么80%的码农都做不了架构师?>>> Java学习从入门到精通-旧版 http://tech.ccidnet.com/art/3737/20051017/465333_1. ...
最新文章
- web11 Struts处理表单数据
- 机器学习系列3:能量函数分析
- Redis的Hash操作
- [Pyhon疫情大数据分析] 一.腾讯实时数据爬取、Matplotlib和Seaborn可视化分析全国各地区、某省各城市、新增趋势
- POI导出word带图片及本地测试没问题,在服务器上找不到模板的问题
- linux脚本登录启动失败,linux – 在X上运行shell脚本失败登录尝试
- dos命令测试网络连通情况
- Java修炼之道--I/O
- java getCause()与e.getMessage() 异常日志区别
- android打包签名
- uitextfield长按显示英文select all,copy,paste?
- 计算机是怎样跑起来的pdf_程序是怎样跑起来的 -- 通过汇编语言了解程序的实际构成(中篇)...
- arduino的串口缓冲区_C#无法从串口Arduino读取完整缓冲区
- 三星固态Dell版的960g的sm863a硬盘
- ams1117 lm317 对比_LM317和AMS-1117-3.3
- 97年大学计算机考试是 级,1997年9月全国计算机等级考试一级笔试试卷 DOS
- 系统分析与设计小组项目总结报告
- 网站漏洞检测之常见安全问题
- 学计算机做纸质笔记,详细图文教你康奈尔大学推荐的超级笔记法,只要一张A4纸张,你也可以做学霸...
- 阿里云大数据开发一面面经,已过,面试题已配答案