什么是runtime

1> runtime是一套底层的c语言API(包括很多强大实用的c语言类型,c语言函数);

2>实际上,平时我们编写的oc代码,底层都是基于runtime实现的

也就是说,我们平时编写的oc代码,最终都是转成了底层的runtime代码(c语言代码) ;

比如说,下面一个创建对象的方法中,

举例:

OC :

[[MJPerson alloc] init]

runtime :

objc_msgSend(objc_msgSend(“MJPerson” , “alloc”), “init”)

runtime有啥用?

1>能动态生成一个类,一个成员变量,一个方法
2>能动态修改一个类,一个成员变量,一个方法
3>能动态删除一个类,一个成员变量,一个方法

runtime 相关的头文件和函数

1> 头文件

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

2> 相关应用

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

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

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

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

这就是我们runtime机制的主要运用方向

3> 相关函数

objc_msgSend : 给对象发送消息

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

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

class_…..

这是我们学习runtime必须知道的函数!

4.必备常识

1> Ivar : 成员变量

2> Method : 成员方法

从上面例子中我们看到我们定义的成员变量,如果要是动态创建方法,可以使用Method

什么是RunLoop

RunLoop顾名思义运行循环,可以称它是为了多线程而存在的。

RunLoop的作用1.保持ios程序的持续稳定。2.处理app的各种事件。3.节省CPU资源,提高程序性能,有事情就做事情,没事情就休息

特别说明:

  (1)如果没有Runloop,那么程序一启动就会退出,什么事情都做不了。
(2)如果有了Runloop,那么相当于在内部有一个死循环,能够保证程序的持续运行
(3)main函数中的Runloop
a 在UIApplication函数内部就启动了一个Runloop
该函数返回一个int类型的值
b 这个默认启动的Runloop是跟主线程相关联的

RunLoop对象
(1)在iOS开发中有两套api来访问Runloop
a.foundation框架【NSRunloop】
b.core foundation框架【CFRunloopRef】
(2)NSRunLoop和CFRunLoopRef都代表着RunLoop对象,它们是等价的,可以互相转换
(3)NSRunLoop是基于CFRunLoopRef的一层OC包装,所以要了解RunLoop内部结构,需要多研究CFRunLoopRef层面的API(Core Foundation层面)
RunLoop与线程的关系
(1)RunLoop可以让线程不死,且一个runloop对应一个线程。
(2)Runloop的创建:主线程Runloop已经创建好了,子线程的runloop需要手动创建
(3)Runloop的生命周期:在第一次获取时创建,在线程结束时销毁
Runloop应用
1)NSTimer
2)ImageView显示:控制方法在特定的模式下可用
3)PerformSelector
4)常驻线程:在子线程中开启一个runloop
5)自动释放池
第一次创建:进入runloop的时候
最后一次释放:runloop退出的时候
其它创建和释放:当runloop即将休眠的时候会把之前的自动释放池释放,然后重新创建一个新的释放池

RunTime&RunLoop初见的更多相关文章

  1. 关于 IOS Runtime Runloop 2

    Runtime 也就是运行时组件,一个纯C语言写的基础库. 我们平时编写的OC代码中, 程序运行过程时, 其实最终都是转成了runtime的C语言代码 Objective-C编写出来的程序必须得到ru ...

  2. iOS 模式详解—「runtime面试、工作」看我就 🐒 了 ^_^.

    引导 Copyright © PBwaterln Unauthorized shall not be *copy reprinted* . 对于从事 iOS 开发人员来说,所有的人都会答出「runti ...

  3. iOS app启动流程

    最近看了些Runtime Runloop的一些知识.边看边摸索.看到群里有人在问 一些面试题.其中就提到了app的启动流程. 所以这里也研究小结一下,以供自己学习备用. 1.项目要运行,就要有入口. ...

  4. iOS 技能图谱

    # iOS 技能图谱## 编程语言 - Swift - Objective-C - C++/C - JavaScript ## 操作系统 - Mac OSX - iOS - watchOS - tvO ...

  5. iOS runtime 与 runloop

    runtime是运行时机制,就是运行到的时候才会执行的机制(类似于栏加载)属于时间先后性质的 runloop 是主线程的运行的意思   属于 (loop) 循环性质的 以下是 具体点的 解释: run ...

  6. 【iOS之runtime、runloop】

    什么是runtime runtime就是运行时,是系统在运行时的一些动态机制,它是一套底层的API,我们平时编写的OC代码,最终会转换为runtime实现. runtime的作用 可以利用runtim ...

  7. runloop和runtime

    runloop Runloop是事件接收和分发机制的一个实现. 一个程序从main函数开始,函数执行完毕之后就会退出,iOS程序也是一样的,但是我们从没看到过iOS程序打开之后直接闪退,肯定是有一些东 ...

  8. runtime和runloop问答

    Runtime 01 问题: objc在向一个对象发送消息时,发生了什么? 解答: 根据对象的 isa 指针找到类对象 id,在查询类对象里面的 methodLists 方法函数列表,如果没有在好到, ...

  9. IOS开发中 RunLoop,RunTime

    1.Objective-C中的函数调用 对于C语言,函数调用是由编译器直接转化完成的,在编译时程序就开始查找要执行的函数(C语言函数调用原理).而在OC中,我们将函数调用称为消息发送.在编译时程序不查 ...

随机推荐

  1. Ruby之入门(一)

    前言 这门语言很少去听过,可能是没怎么用到就不会听到太多关于ruby的消息,工作需要这门语言,需要从0开始学习这门语言,慢慢学习简直...太神奇了...,原谅我见识浅薄.原来很早就已经出世了,园子中也 ...

  2. 应用程序框架实战三十八:项目示例VS解决方案的创建(一)

    进行项目开发的第一步,是创建出适合自己团队习惯的VS解决方案,虽然我已经提供了项目示例,但毕竟是我创建的,你直接使用可能并不合适,另外你如果尝试模仿重新创建该示例,中间可能碰到各种障碍,特别是项目间的 ...

  3. MySQL学习笔记十四:优化(1)

    SQL优化 1.查看各种SQL执行的频率 mysql> show status like 'Com_select';--Com_insert,Com_delete,connections(试图连 ...

  4. 如何用perl将表格中不同列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起

    最近写了一个perl脚本,实现的功能是将表格中其中两列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起. 表格内容如下: 员工号码 员工姓名 职位 入职日期 1001 张三 销售 1980/12/ ...

  5. C语言版flappy bird黑白框游戏

    在此记录下本人在大一暑假,2014.6~8这段时间复习C语言,随手编的一个模仿之前很火热的小游戏----flappy bird.代码bug基本被我找光了,如果有哪位兄弟找到其他的就帮我留言下吧,谢谢了 ...

  6. typeof的一些兼容性问题

    typeof存在一些兼容性的问题,在IE6,7,8中的DOM和BOM元素及其对象上的方法的判定会出现误差,在safari上对NodeList实例 的判定,对ExpReg实例的判断(早期的chrome, ...

  7. C#对SQL Server数据库的备份与还原

    备份数据库: string connectionString = "server=服务器名称;database=数据库名;uid=登入名;pwd=登入密码";         // ...

  8. git版本回退, github版本回退

    上周提交了更改,过了周末回来说要撤销上个story.于是,需要找到上周提交的版本,rollback回来. git版本管理命令,自从习惯使用管理工具之后就很少接触了,当突然寻找其他指令的时候就成浆糊了, ...

  9. 用于后台管理的列表数据控件:DataGrid和Select

    常听人说不喜欢javascript.然而我一个一直用C#做后端的人,最喜欢的编程语言就是javascript了,我接收它的优点,也接收它的缺点! 前段时间接触过easyui,用过里面的DataGrid ...

  10. Final Cut Pro X效果插件开发总结

    一.介绍 最近公司需要针对Final Cut Pro(FCP)开发一款效果插件,用于对公司自己开发的视频格式进行后期处理.Final Cut Pro是苹果公司推出的一款视频剪辑软件,因此需要在OSX平 ...