初探Runloop(一)
iOS 的最大特点就是运行时. 保证运行时的就是RunLoop
1.什么是RunLoop呢?
从字面理解就是:运行循环
引用下官方文档的介绍:
A run loop is an event processing loop that you use to schedule work and coordinate the receipt of incoming events.(翻译:运行循环是一个事件处理循环,用于计划工作和协调接收传入事件。)
2.RunLoop 的作用是什么 ?
自我总结如下:
(1) 保证程序一直运行
(2)负责监听事件
(3)负责在一次循环中渲染UI
(4)有event就做 做完或者无事就退朝休息
作为一名开发者,我们有想过在ViewDidLoad里写的代码怎么执行的吗?
就比如一个简单的打印代码 NSLog(@"123456"); 系统就是把代码加到了RunLoop里来保证代码的执行.
3.RunLoop的五种模式(4和5属于系统运行模式,开发几乎用不到
(1) KCFRunLoopDefaultMode:默认 Mode,通常主线程在这个 Mode 下运行。
(2) UITrackingRunLoopMode:(优先切换)UI界面有交互时触发 。 (3)kCFRunLoopCommonModes:在任意 mode 下,发生事件时,commonMode 都会被触发。
(4) UIInitializationRunLoopMode:刚启动 app 进入的第一个 mode,起到过渡的作用,启动完成后不再使用。
(5)GSEventReceiveRunLoopMode: Graphic 相关事件的 mode。
4.RunLoop 的mode 里面都有什么?
(1)Source
关于Source在官方文档中提到:运行循环从两种不同类型的源接收事件。
①输入源传递异步事件,通常是来自另一个线程或其他应用程序的消息。
②计时器源传递在预定时间或重复间隔发生的同步事件。
(2)Observer
(3)Timer
5.什么时候用RunLoop?
官方建议下面四种情况使用RunLoop:
- Use ports or custom input sources to communicate with other threads.
使用端口或自定义输入源与其他线程通信。 - Use timers on the thread.
在线程上使用计时器。 - Use any of the
performSelector… methods in a Cocoa application.
在Cocoa应用程序中使用任何PerformSelector…方法。 - Keep the thread around to perform periodic tasks.
保持线程在周围以执行定期任务。
初探Runloop(一)的更多相关文章
- RunLoop 之初探
你好2019!一起努力呀! 1.什么是runloop runloop是通过内部维护的事件循环对事件/消息进行管理的一个对象. 事件循环(Event loop):通俗的解释:没有消息处理的时候,休眠以避 ...
- RunLoop 总结:RunLoop的应用场景(一)
参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- 我的runloop学习笔记
前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...
- .NET文件并发与RabbitMQ(初探RabbitMQ)
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...
- React Native初探
前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...
随机推荐
- 界面编程之QT的文件操作20180729
/*******************************************************************************************/ 一.QT文件 ...
- node.js 开发简易的小爬虫
node.js 开发简易的小爬虫 最近公司开发一款医药类的软件,所以需要一些药品的基础数据,所以本人就用node.js写一个简易的小爬虫,并写记录这个Demo以供大家参考. 一.开发前的准备: 1, ...
- LeetCode 4.反转整数
给定一个 32 位有符号整数,将整数中的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: ...
- John:How JavaScript Timers Work
John大神的bolg链接:http://ejohn.org/blog/how-javascript-timers-work/ JavaScript中的定时器经常表现的跟我们想象的不同,我们用三个函数 ...
- Apache 的 ab 压测工具快速使用
ab 是一个 httpd 自带的很好用的压力测试工具,它是 apache bench 命令的缩写.ab 命令会创建多个并发访问线程,模拟多个访问者同时对某一 URL 地址进行访问.可以用来测试 apa ...
- LRN
转自https://blog.csdn.net/u011204487/article/details/76026537 LRN全称为Local Response Normalization,即局部响应 ...
- angularJs实现级联操作
angular实现级联非常的方便比起传统的jq和js来说,一般我们肯定是从后台获取一个list,然后生成一个下拉框,然后选中一个下拉框,得到id,再得到下一个list. 这些angular都给我做好了 ...
- VS2010 设置main函数输入参数
main函数的argc.argv参数. 英文版:菜单Project -> Properties -> Configuration Properties -> Debugging在Co ...
- SQL记录-PLSQL字符串
PL/SQL字符串 PL/SQL字符串实际上是一个可选的尺寸规格字符序列.字符可以是数字,字母,空白,特殊字符或全部的组合. PL/SQL提供了三种类型的字符串: 固定长度字符串:在这样的字符串,程序 ...
- Flex 自定义 Zlert 组件!
说明: 原生的 Alert.show 参数,要显示的按钮你只能 Alert.OK | Alert.Cancel 这样; 自定义 Zlert 参数跟原生的 差不多,按钮写法是这样写的: {"b ...