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(一)的更多相关文章

  1. RunLoop 之初探

    你好2019!一起努力呀! 1.什么是runloop runloop是通过内部维护的事件循环对事件/消息进行管理的一个对象. 事件循环(Event loop):通俗的解释:没有消息处理的时候,休眠以避 ...

  2. RunLoop 总结:RunLoop的应用场景(一)

    参考资料 好的书籍都是值得反复看的,那好的文章,好的资料也值得我们反复看.我们在不同的阶段来相同的文章或资料或书籍都能有不同的收获,那它就是好文章,好书籍,好资料.关于iOS 中的RunLoop资料非 ...

  3. 初探领域驱动设计(2)Repository在DDD中的应用

    概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...

  4. CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探

    CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...

  5. 从273二手车的M站点初探js模块化编程

    前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...

  6. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  7. 我的runloop学习笔记

    前言:公司项目终于忙的差不多了,最近比较闲,想起叶大说过的iOS面试三把刀,GCD.runtime.runloop,runtime之前已经总结过了,GCD在另一篇博客里也做了一些小总结,今天准备把ru ...

  8. .NET文件并发与RabbitMQ(初探RabbitMQ)

    本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...

  9. React Native初探

    前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...

随机推荐

  1. c++并发编程之创建线程

    以boost为例.boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thread(const boost::functi ...

  2. hdu3374解题报告

    hdu3374 Solution: 最小表示法+KMP 设一个字符串S的最小循环节是T.(如S=“abababab”,则T=“ab”) 在最小循环节T中,只有1个最小字符串和最大字符串.则最小字符串的 ...

  3. 在Linux中将脚本做成系统服务

    有一些情况下,我们需要将某些脚本作为系统服务来运行.比如,在我使用workerman框架开发php程序时,需要使用管理员权限来运行,而且需要开机自行启动程序提供服务.这个时候将启动程序写成服务就可以很 ...

  4. 用Riffstation扒带

    有人说扒带本质就是扒和声 编曲初学者如果是自学的情况下很容易陷入瓶颈,网络上的编曲爱好者大都建议去多扒带,所谓扒带其实就是把别人的编曲自己编出来,然而这要很好的听力,下面我介绍的这款软件就是用来扒和声 ...

  5. python操作txt文件中数据教程[4]-python去掉txt文件行尾换行

    python操作txt文件中数据教程[4]-python去掉txt文件行尾换行 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文章 python操作txt文件中数据教程[1]-使用pyt ...

  6. RESTful记录-RESTful介绍

    RESTful Web服务是基于REST架构的Web服务.在REST架构一切都是一种资源. RESTful Web服务是轻量级的,高度可扩展性和可维护性,并且非常常用于创建基于API的Web应用程序. ...

  7. 何凯文每日一句打卡||DAY4

  8. Git与GitHub学习笔记(二)提交的一些笔记

    1.合并分支的使用一定要切换到master分支上去合并:git merge company2.切换分支的时候一定要提交干净本地分支的代码,才可以切换分支,否则提示错误信息: 3.这时候我们做的就是提交 ...

  9. MySQL异步复制延迟解决

    http://www.ttlsa.com/mysql/mysql-5-7-enhanced-multi-thread-salve/

  10. javascript使用事件委托

    事件委托是javascript中一个很重要的概念,其基本思路就是利用了事件冒泡的机制,给上级(父级)元素触发事件的dom对象上绑定一个处理函数.在当有需要很多dom对象要绑定事件的情况下,可以使用事件 ...