iOS runLoop 理解
目录
概述
run loop modes
一、概述
run loop叫事件处理循环,就是循环地接受各种各样的事件。run loop是oc用来管理线程里异步事件的工具。一个线程通过run loop可以监听多个事件源(input、timer),当没有任何事件发生时run loop置线程于休眠状态,当事件到达时run loop唤醒线程处理这些事件。
系统会给每个线程(包过main thread)关联一个run loop对象,所以我们不需要手动的为每个线程创建run loop对象(通过[NSRunLoop currentRunLoop]可以获取)。
iOS程序在启动的时候,系统会自动启动main thread的run loop对象。其他线程的run loop对象并不会被系统自动运行,需要你在合适的时候手动的启动。
run loop有只有两种事件来源:input Sources 、timer Sources。
下图runloop运行机构图:

runloop 除了处理这些事件来源,还会把整个处理事件源的过程以通知的方式发送给runloop的观察者。
二、run loop modes
一个runloop modes 是指一个被监听的事件源的集合。每个事件源直接或者间接的关联着一个runloop modes。
runloop 每次 run 时都必须直接或者间接的指定一个 modes,在这次 loop 当中只有关联了此 modes 的事件源才能被监听和递交处理(观察者也只有在关联了此 modes 的情况下才能被通知)。关联其他的 modes 的事件源将不被监听和处理,直到runloop 运行在适合的 modes时它们才会被处理。
下表是modes的描述
|
Mode |
Name |
Description |
|
Default |
NSDefaultRunLoopMode (Cocoa) kCFRunLoopDefaultMode (Core Foundation) |
默认的mode,大多数情况是用这个mode运行runloop |
|
Connection |
NSConnectionReplyMode(Cocoa) |
Cocoa 用这个模式来监听NSConnection对象的事件,我们不会用到这个mode |
|
Modal |
NSModalPanelRunLoopMode(Cocoa) |
Cocoa 用这个模式来标识 modal panels(模态). |
|
Event tracking |
NSEventTrackingRunLoopMode(Cocoa) |
在鼠标拖动的过程中,Cocoa用这个模式来限制其他mode的监听与处理一提高UI交互的高效性。 |
|
Common modes |
NSRunLoopCommonModes (Cocoa) kCFRunLoopCommonModes (Core Foundation) |
是一个集合 cocoa下包含: default, modal, and event tracking modes Core Foundation下包含: default |
注意,创建一个NSTimer时,系统默认把这个定时器关联到NSDefaultRunLoopMode下,所以当滑动tableView时,即使定时器到点了也不会被触发的。这种情况,可以通过把timer关联到NSRunLoopCommonModes 来解决。
iOS runLoop 理解的更多相关文章
- iOS Runloop理解
一.RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程.RunLoop就是控制线程生命周期并接收事件进行处理的机制. RunLoop是iOS事件响应与任务处理最核心 ...
- iOS --runtime理解
iOS~runtime理解 Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门语言所必需理解的东西.最近在学习Runtime,有自己的一些心得,整理如下,一为 查阅方便二为 或许能给 ...
- iOS 深入理解RunLoop
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...
- ios -RunLoop(简单理解)
一. RunLoop简介 RunLoop字面意思是运行时,即跑圈得意思.它可以在我们需要的时候自己跑起来运行,在我们没有操作的时候就停下来休息,充分节省CPU资源,提高程序性能. 二. RunLoop ...
- iOS开发 - RunLoop理解
RunLoop概念 运行循环,一个 run loop 就是一个事件处理的循环,用来不停的调度工作以及处理事件 作用 保持程序的持续运行 监听处理App中的各种事件(触摸事件,定时器事件,selecto ...
- iOS runloop 资源汇总-b
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...
- iOS RunLoop详解
1. RunLoop简介 1.1 什么是RUnLoop 可以理解为字面的意思:Run表示运行,Loop表示循环.结合在一起就是运行的循环.通常叫做运行循环. RunLoop实际上是一个对象,这个对象在 ...
- iOS Runloop 消息循环
介绍 Runloop是一种事件监听循环,可以理解成一个while死循环,监听到事件就起来,没有就休息. Runloop可以在不同模式下进行切换,iOS有五种模式,其中UIInitializationR ...
- ios runloop学习
今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢.当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运 ...
随机推荐
- Erwin 简单使用
1. 物理设计:汉译英过程 ① Logical 中操作:Tools-Names-Edit Naming Standards…-Glossary选项import,导入内容为编辑好的CSV文件(只包含中文 ...
- view的superview的变换
今天遇到一个奇怪的问题,一个view(称为subview)被加在了一个cell(superView1)上,然后创建了一个view(为superView2),将subview重新加在了superView ...
- 阿里云OSS图片上传plupload.js结合jq-weui 图片上传的插件
项目中用到了oss上传,用的plupload,奈何样式上不敢恭维,特别是放在移动端上使用.于是自己把它移植到了jq weui的上传图片组件上. 更改:选择照片后确认即及时上传至oss服务器,不限制上传 ...
- POJ2409 Let it Bead(Polya定理)
Let it Bead Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6443 Accepted: 4315 Descr ...
- MyBatis单列工厂的实现
MyBatis单列工厂的实现 SqlSessionFactoryUtils package com.utils; import org.apache.ibatis.io.Resources; impo ...
- Java - 静态方法的线程安全问题
若该静态方法中有对某个静态属性操作,那么它就不是线程安全的,反之,若只对实例属性操作,那么它就是线程安全的. 补充说明,因为,静态方法不对特定的实例操作,只能访问静态成员.实例方法可对特定的实 ...
- 返回固定数据的web服务器
import socket def handle_client(socket_con): """ 接收来自客户端的请求,并接收请求报文,解析,返回 "" ...
- js函数的默认参数
function f(flag, start, end, msg){ flag = flag == false ? flag : true; start = start || null; start ...
- Centos6.8安装python3.6
1.目的简介: centos默认使用的是python 2.6.6,而python的2.x 和 3.x 是两个不兼容的版本,到目前的python发展,都已经过渡到了python 3.x,所以需要手动将p ...
- yii2邮箱发送
yii2 邮件发送 163邮箱 1.在配置文件main-local.php components=>[]里面配置 'mailer' => [ 'class' => 'yii\swi ...