iOS中的Runloop
为什么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相关推荐
- iOS中关于NSTimer使用知多少
看到这个标题,你可能会想NSTimer不就是计时器吗,谁不会用,不就是一个能够定时的完成任务的东西吗? 我想说你知道NSTimer会retain你添加调用方法的对象吗?你知道NSTimer是要加到ru ...
- 李洪强iOS开发之RunLoop的原理和核心机制
李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...
- iOS runtime和runloop
runtime 和 runloop 作为一个程序员进阶是必须的,也是非常重要的, 在面试过程中是经常会被问到的, 所以大家有必要进行研究,有能力的童鞋可以和下面作者一样, 亲历实践一下. 在简书里发现 ...
- iOS中的CADisplayLink定时器
2019独角兽企业重金招聘Python工程师标准>>> iOS中的CADisplayLink定时器 说到定时器,在iOS中最常用的为NSTimer类,其实CADisplayLink类 ...
- iOS中的应用启动原理
iOS中的应用启动原理 来源: http://m.blog.csdn.net/article/details?id=50530090 http://m.warting.com/program/201 ...
- iOS开发多线程-RunLoop
一.什么是RunLoop 1.从字面意思看 1)运行循环 2)跑圈 2.基本作用 1)保持程序的持续运行 2)处理App中的各种事件(比如触摸事件.定时器事件.Selector事件) 3)节省CPU资 ...
- iOS中的三大定时器
iOS开发中定时器经常会用到,iOS中常用的定时器有三种,分别是NSTime,CADisplayLink和GCD. NSTimer 方式1 // 创建定时器NSTimer *timer = [NSTi ...
- [iOS开发]iOS中的Hash
文章目录 前言 关联对象的底层原理 weak的实现原理 KVO的实现原理 iOS App签名的原理 对象引用计数存储的位置 Runloop与线程的存储关系 NSDictionary的原理 哈希表 哈希 ...
- iOS中“事件”的前因后果
iOS的事件是一个由触发行为到响应的过程.本文旨在表达事件如何处理响应,如何传递事件的. 1. 前言 国内智能手机要从2000年开始说起,手机的进化是飞速的,单从操作来看,最开始是数字实体键盘,后来出 ...
- IOS中触摸事件学习
IOS中触摸事件学习 1. 事件的声明周期 2. 系统相应阶段 3. APP响应阶段 4. 触摸.事件.响应者 4.1 UITouch(触摸) 4.2 UIEvent(事件真身) 4.3 UIResp ...
最新文章
- linux卸载mpfr,Red Hat Linux在安装gcc时遇到的问题汇总
- Tom Clancy's Splinter Cell: Double Agent
- 原创:(网格化地图之初)高斯大地座标(经度、纬度)→3°投影带平面直角坐标(X、Y)换算...
- CentOS 6使用rpm方式安装JDK8
- AtCoder4515 [AGC030F] Permutation and Minimum(dp)
- Android 隐藏状态栏,沉浸式状态栏,状态栏背景色,状态栏字体色,透明状态工具类
- python 表示图论_Python 图论工具 | 学步园
- nvme装系统不能自引导_新买的固态硬盘用AHCI不能装系统,而用IDE却可以?问题就在这里...
- JAVA 大作业——DAY 3
- 凯撒密码的Java实现
- matlab输出动态gif图片
- ubuntu ffmpeg 录制系统音频
- 用 Python 快速追踪基金的收益情况 | Python财经实践
- We're on the cusp of deep learning for the masses. You can thank Google later
- 因执迷而绽放,终登聆听贡献者荣誉榜
- 分享Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月18日-6月24日)
- 在linux下使用rpm命令安装软件
- Linux命令行中对虚拟网卡的增删改查
- Python Pillow批量转换tif格式到jpg
- STM32控制舵机转动_从0到1
热门文章
- paip.c++ 内存泄漏以及解决之道.
- paip.验证码识别---初始化
- System.Transactions.Diagnostics.DiagnosticTrace 的类型初始值设定项引发异常。配置系统未能初始化
- apache设置域名绑定 以及绑定不起作用的排查.
- PAIP.MYSQL设置远程账户登陆总结
- 【资产管理】2020年海外头部资管机构经营特点及启示
- OpenAPI 开发者挑战赛第三期
- 最终,我决定将代码迁出x86架构!
- 今天的C位,必须是这位浙大卜教授!
- 【图像压缩】基于matlab JEPG图像压缩【含Matlab源码 1167期】