初探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 ...
随机推荐
- c++并发编程之创建线程
以boost为例.boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thread(const boost::functi ...
- hdu3374解题报告
hdu3374 Solution: 最小表示法+KMP 设一个字符串S的最小循环节是T.(如S=“abababab”,则T=“ab”) 在最小循环节T中,只有1个最小字符串和最大字符串.则最小字符串的 ...
- 在Linux中将脚本做成系统服务
有一些情况下,我们需要将某些脚本作为系统服务来运行.比如,在我使用workerman框架开发php程序时,需要使用管理员权限来运行,而且需要开机自行启动程序提供服务.这个时候将启动程序写成服务就可以很 ...
- 用Riffstation扒带
有人说扒带本质就是扒和声 编曲初学者如果是自学的情况下很容易陷入瓶颈,网络上的编曲爱好者大都建议去多扒带,所谓扒带其实就是把别人的编曲自己编出来,然而这要很好的听力,下面我介绍的这款软件就是用来扒和声 ...
- python操作txt文件中数据教程[4]-python去掉txt文件行尾换行
python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...
- RESTful记录-RESTful介绍
RESTful Web服务是基于REST架构的Web服务.在REST架构一切都是一种资源. RESTful Web服务是轻量级的,高度可扩展性和可维护性,并且非常常用于创建基于API的Web应用程序. ...
- 何凯文每日一句打卡||DAY4
- Git与GitHub学习笔记(二)提交的一些笔记
1.合并分支的使用一定要切换到master分支上去合并:git merge company2.切换分支的时候一定要提交干净本地分支的代码,才可以切换分支,否则提示错误信息: 3.这时候我们做的就是提交 ...
- MySQL异步复制延迟解决
http://www.ttlsa.com/mysql/mysql-5-7-enhanced-multi-thread-salve/
- javascript使用事件委托
事件委托是javascript中一个很重要的概念,其基本思路就是利用了事件冒泡的机制,给上级(父级)元素触发事件的dom对象上绑定一个处理函数.在当有需要很多dom对象要绑定事件的情况下,可以使用事件 ...