运行时机制,runtime库里面包含了跟类、成员变量、方法相关的API,比如获取类里面的所有成员变量,为类动态添加成员变量,动态改变类的方法实现,为类动态添加新的方法等 需要导入<objc/message.h><objc/runtime.h>

1.是什么

1> runtime是一套比较底层的纯C语言API, 属于1个C语言库, 包含了很多底层的C语言API

2> 平时编写的OC代码, 在程序运行过程中, 其实最终都是转成了runtime的C语言代码, runtime算是OC的幕后工作者

3> 举例:

OC :

[[MJPerson alloc] init]

runtime :

objc_msgSend(objc_msgSend("MJPerson" , "alloc"), "init")

2.用过么? 怎么用?

1> runtime是属于OC的底层, 可以进行一些非常底层的操作(用OC是无法现实的, 不好实现)

* 在程序运行过程中, 动态创建一个类(比如KVO的底层实现)

* 在程序运行过程中, 动态地为某个类添加属性\方法, 修改属性值\方法

* 遍历一个类的所有成员变量(属性)\所有方法

3.相关的头文件和函数

1> 头文件

* <objc/runtime.h>

* <objc/message.h>

2> 相关应用

* NSCoding(归档和解档, 利用runtime遍历模型对象的所有属性)

* 字典 --> 模型 (利用runtime遍历模型对象的所有属性, 根据属性名从字典中取出对应的值, 设置到模型的属性上)

* KVO(利用runtime动态产生一个类)

* 用于封装框架(想怎么改就怎么改)

3> 相关函数

* objc_msgSend : 给对象发送消息

* class_copyMethodList : 遍历某个类所有的方法

* class_copyIvarList : 遍历某个类所有的成员变量

* class_.....

4.必备常识

1> Ivar : 成员变量

2> Method : 成员方法

转载于:https://www.cnblogs.com/changxs/p/runtime.html

runtime实现的机制是什么,怎么用,一般用于干嘛. 你还能记得你所使用的相关的头文件或者某些方法的名称吗?...相关推荐

  1. NSObject头文件解析 / 消息机制 / Runtime解读 (一)

    NSObject头文件解析 当我们需要自定义类都会创建一个NSObject子类, 比如: #import <Foundation/Foundation.h>@interface Class ...

  2. iOS的runtime运行时机制

    本文转自http://www.cnblogs.com/guoxiao/p/3583432.html 最近一直在研究runtime运行时机制的问题,我想可能也有很多人不太清楚这个问题吧?在这里跟大家沟通 ...

  3. runtime消息转发机制

    Objective-C 扩展了 C 语言,并加入了面向对象特性和 Smalltalk 式的消息传递机制.而这个扩展的核心是一个用 C 和 编译语言 写的 Runtime 库.它是 Objective- ...

  4. linux信号值头文件位置,Linux C 信号处理机制

    一 . 信号 1. 信号:是内核发送给某一进程的一种消息 . 2. 信号机制:是Linux系统中用于进程之间相互通信或操作的一种机制. 3. 信号的来源:信号来源于内核 4. 产生原因: (1)用户通 ...

  5. 浅谈runtime运行时机制

    由于OC是运行时语言,只有在程序运行时,才会去确定对象的类型,并调用类与对象相应的方法.利用runtime机制让我们可以在程序运行时动态修改类.对象中的所有属性.方法. 下面就介绍运行时一种很简单的使 ...

  6. android工程rsc文件夹,【MTK】Run-time Switchable Configuration机制

    编译阶段以某种方式将不同硬件的配置信息写入Image 配置信息一般包含Property列表/APK/... 具体流程请参考下一章节的介绍 LK(little kernel)通过 eFuse/GPIO等 ...

  7. 采用信号量机制实现消费者与生产者的线程同步_你还能聊聊常用的进程同步算法? 上篇[五]...

    点击上方 " 布衣码农 " ,免费订阅~选择" 设为星标 ",第一时间免费获得更新~ 「布衣码农」进程同步的最佳实践! 进程同步回顾 进程同步控制有多种方式:算 ...

  8. java license机制dll_(转)使用truelicense实现用于JAVA工程license机制(包括license生成和验证)...

    开发的软件产品在交付使用的时候,往往会授权一段时间的试用期,这个时候license就派上用场了.不同于在代码中直接加上时间约束,需要重新授权的时候使用license可以避免修改源码,改动部署,授权方直 ...

  9. Android进阶必备:滑动冲突解决与事件分发机制(附视频讲解)这篇看完还不懂请寄刀片

    1.前言 Android学习一段时间,需求做多了必然会遇到滑动冲突问题,比如在一个ScrollView中要嵌套一个地图View,这时候触摸移动地图或者放大缩小地图就会变得不太准确甚至没有反应,这就是遇 ...

最新文章

  1. Java基础入门语法和安装
  2. 数据结构(二):线性表包括顺序存储结构(顺序表、顺序队列和顺序栈)和链式存储结构(链表、链队列和链栈)...
  3. 在副业刚需的时代,如何掌握副业的正确姿势?
  4. java编写记事本程序出现图形,高手帮忙啊,老师布置了一个作业,要用java编写一个记事本程序...
  5. [URAL1962]并查集
  6. FPGA学习笔记---Verilog延迟语句分析比较
  7. 74xx系列芯片说明
  8. 灭菌仓密封性测试方案
  9. 基于RLE的matlab图像无损压缩实现
  10. 怎么看电脑的hdmi是输出还是输入_笔记本hdmi接口是输入还是输出
  11. 【CentOS】CentOS修改IP地址
  12. Itest(爱测试),最懂测试人的开源测试管理, 开源BUG跟踪管理软件隆重发布
  13. 机器学习(周志华) 参考答案 第十四章 概率图模型 14.9
  14. 【随机过程】第二版龚光鲁译课后习题4.5参考答案
  15. APISpace 笑话大全API
  16. 中关村电子商户纷纷搬走或转型 为哪般
  17. 四种人适合一起创业,三种人绝对不能合伙
  18. LaTeX \genfrac 分式命令
  19. 前端目前还是炙手可热吗?
  20. 标准的公共智能运输系统结构图

热门文章

  1. html5添加到安卓桌面图标,Android向桌面添加快捷方式,使其指向特定的网页
  2. python threading模块的方法_Python THREADING模块中的JOIN()方法深入理解
  3. ora00936缺失表达式怎么解决_正则表达式替换函数
  4. 9月PMP考试起用新考纲,这些变化你了解了吗?
  5. flutter嵌入HTML5页面,Flutter加载Html并实现与JS 的双向调用
  6. 从甲方到乙方,如何做好混沌工程的行业化落地
  7. springboot获取原生js请求_七节课带你学会SpringBoot,第三课
  8. tcp option 结构体_基于 Kotlin 实现一个简单的 TCP 自定义协议
  9. sklearn pipeline_Sklearn介绍
  10. DeepLearning:CNN网络学习之LetNet-5解读(论文+分析+代码)