为什么80%的码农都做不了架构师?>>>   

Runloop是事件接收和分发机制的一个实现。

Runloop提供了一种异步执行代码的机制,不能并行执行任务。

在主队列中,Main RunLoop直接配合任务的执行,负责处理UI事件、定时器以及其他内核相关事件。

RunLoop的主要目的:

保证程序执行的线程不会被系统终止。

什么时候使用Runloop ?

当需要和该线程进行交互的时候才会使用Runloop.

每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。

一般情况下我们是没有必要去启用线程的RunLoop的,除非你在一个单独的线程中需要长久的检测某个事件。

主线程 默认有Runloop。当自己启动一个线程,如果只是用于处理单一的事件,则该线程在执行完之后就退出了。所以当我们需要让该线程监听某项事务时,就得让线程一直不退出,runloop就是这么一个循环,没有事件的时候,一直卡着,有事件来临了,执行其对应的函数。

Runloop,正如其名所示,是线程进入和被线程用来响应事件以及调用事件处理函数的地方。需要在代码中使用控制语句实现run loop的循环,也就是说,需要代码提供while 或者 for循环来驱动run loop。

在这个循环中,使用一个Runloop对象[NSRunloop currentRunloop]执行接收消息,调用对应的处理函数。

Runloop接收两种源事件:input sources和timer sources。

input sources 传递异步事件,通常是来自其他线程和不同的程序中的消息;

timer sources(定时器) 传递同步事件(重复执行或者在特定时间上触发)。

除了处理input sources,Runloop 也会产生一些关于本身行为的notificaiton。注册成为Runloop的observer,可以接收到这些notification,做一些额外的处理。(使用CoreFoundation来成为runloop的observer)。

Runloop工作的特点:

1> 当有事件发生时,Runloop会根据具体的事件类型通知应用程序作出响应;

2> 当没有事件发生时,Runloop会进入休眠状态,从而达到省电的目的;

3> 当事件再次发生时,Runloop会被重新唤醒,处理事件。

提示:一般在开发中很少会主动创建Runloop,而通常会把事件添加到Runloop中。

转载于:https://my.oschina.net/aofe/blog/268803

iOS中的Runloop相关推荐

  1. iOS中关于NSTimer使用知多少

    看到这个标题,你可能会想NSTimer不就是计时器吗,谁不会用,不就是一个能够定时的完成任务的东西吗? 我想说你知道NSTimer会retain你添加调用方法的对象吗?你知道NSTimer是要加到ru ...

  2. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  3. iOS runtime和runloop

    runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, 所以大家有必要进行研究,有能力的童鞋可以和下面作者一样, 亲历实践一下. 在简书里发现 ...

  4. iOS中的CADisplayLink定时器

    2019独角兽企业重金招聘Python工程师标准>>> iOS中的CADisplayLink定时器 说到定时器,在iOS中最常用的为NSTimer类,其实CADisplayLink类 ...

  5. iOS中的应用启动原理

    iOS中的应用启动原理 来源: http://m.blog.csdn.net/article/details?id=50530090  http://m.warting.com/program/201 ...

  6. iOS开发多线程-RunLoop

    一.什么是RunLoop 1.从字面意思看 1)运行循环 2)跑圈 2.基本作用 1)保持程序的持续运行 2)处理App中的各种事件(比如触摸事件.定时器事件.Selector事件) 3)节省CPU资 ...

  7. iOS中的三大定时器

    iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD. NSTimer 方式1 // 创建定时器NSTimer *timer = [NSTi ...

  8. [iOS开发]iOS中的Hash

    文章目录 前言 关联对象的底层原理 weak的实现原理 KVO的实现原理 iOS App签名的原理 对象引用计数存储的位置 Runloop与线程的存储关系 NSDictionary的原理 哈希表 哈希 ...

  9. iOS中“事件”的前因后果

    iOS的事件是一个由触发行为到响应的过程.本文旨在表达事件如何处理响应,如何传递事件的. 1. 前言 国内智能手机要从2000年开始说起,手机的进化是飞速的,单从操作来看,最开始是数字实体键盘,后来出 ...

  10. IOS中触摸事件学习

    IOS中触摸事件学习 1. 事件的声明周期 2. 系统相应阶段 3. APP响应阶段 4. 触摸.事件.响应者 4.1 UITouch(触摸) 4.2 UIEvent(事件真身) 4.3 UIResp ...

最新文章

  1. linux卸载mpfr,Red Hat Linux在安装gcc时遇到的问题汇总
  2. Tom Clancy's Splinter Cell: Double Agent
  3. 原创:(网格化地图之初)高斯大地座标(经度、纬度)→3°投影带平面直角坐标(X、Y)换算...
  4. CentOS 6使用rpm方式安装JDK8
  5. AtCoder4515 [AGC030F] Permutation and Minimum(dp)
  6. Android 隐藏状态栏,沉浸式状态栏,状态栏背景色,状态栏字体色,透明状态工具类
  7. python 表示图论_Python 图论工具 | 学步园
  8. nvme装系统不能自引导_新买的固态硬盘用AHCI不能装系统,而用IDE却可以?问题就在这里...
  9. JAVA 大作业——DAY 3
  10. 凯撒密码的Java实现
  11. matlab输出动态gif图片
  12. ubuntu ffmpeg 录制系统音频
  13. 用 Python 快速追踪基金的收益情况 | Python财经实践
  14. We're on the cusp of deep learning for the masses. You can thank Google later
  15. 因执迷而绽放,终登聆听贡献者荣誉榜
  16. 分享Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月18日-6月24日)
  17. 在linux下使用rpm命令安装软件
  18. Linux命令行中对虚拟网卡的增删改查
  19. Python Pillow批量转换tif格式到jpg
  20. STM32控制舵机转动_从0到1

热门文章

  1. paip.c++ 内存泄漏以及解决之道.
  2. paip.验证码识别---初始化
  3. System.Transactions.Diagnostics.DiagnosticTrace 的类型初始值设定项引发异常。配置系统未能初始化
  4. apache设置域名绑定 以及绑定不起作用的排查.
  5. PAIP.MYSQL设置远程账户登陆总结
  6. 【资产管理】2020年海外头部资管机构经营特点及启示
  7. OpenAPI 开发者挑战赛第三期
  8. 最终,我决定将代码迁出x86架构!
  9. 今天的C位,必须是这位浙大卜教授!
  10. 【图像压缩】基于matlab JEPG图像压缩【含Matlab源码 1167期】