目录

  • 概述

  • 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 理解的更多相关文章

  1. iOS Runloop理解

    一.RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程.RunLoop就是控制线程生命周期并接收事件进行处理的机制. RunLoop是iOS事件响应与任务处理最核心 ...

  2. iOS --runtime理解

    iOS~runtime理解 Runtime是想要做好iOS开发,或者说是真正的深刻的掌握OC这门语言所必需理解的东西.最近在学习Runtime,有自己的一些心得,整理如下,一为 查阅方便二为 或许能给 ...

  3. iOS 深入理解RunLoop

    RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...

  4. ios -RunLoop(简单理解)

    一. RunLoop简介 RunLoop字面意思是运行时,即跑圈得意思.它可以在我们需要的时候自己跑起来运行,在我们没有操作的时候就停下来休息,充分节省CPU资源,提高程序性能. 二. RunLoop ...

  5. iOS开发 - RunLoop理解

    RunLoop概念 运行循环,一个 run loop 就是一个事件处理的循环,用来不停的调度工作以及处理事件 作用 保持程序的持续运行 监听处理App中的各种事件(触摸事件,定时器事件,selecto ...

  6. iOS runloop 资源汇总-b

    RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...

  7. iOS RunLoop详解

    1. RunLoop简介 1.1 什么是RUnLoop 可以理解为字面的意思:Run表示运行,Loop表示循环.结合在一起就是运行的循环.通常叫做运行循环. RunLoop实际上是一个对象,这个对象在 ...

  8. iOS Runloop 消息循环

    介绍 Runloop是一种事件监听循环,可以理解成一个while死循环,监听到事件就起来,没有就休息. Runloop可以在不同模式下进行切换,iOS有五种模式,其中UIInitializationR ...

  9. ios runloop学习

    今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢.当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运 ...

随机推荐

  1. 【动态规划 floyd】SPOJ ACPC13

    为什么rzz会把这题放在NOI模拟赛的T2? 题目大意 有一张$n$个点$m$条边的有向图,每条边有权值$w_i$. 定义一个任务$(a_i,b_i,c_i)$是如下一条路径: 最多经过$c_i$条边 ...

  2. C/C++程序基础 (十)模板和泛型

    什么是泛型编程 基于模板,有效将算法和数据结构分离. 模板 包括类型和参数 模板函数:抽象的函数定义,代表一类同构函数.编译器在其调用位置自动完成对应模板函数的实例化. 模板类:抽象的类定义,代表更高 ...

  3. PHP设计者---composer

    Composer 是 PHP5以上 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.Composer 不是一个包管理器.是的,它涉及 "packages&q ...

  4. CentOS7 配置环境

    1.安装CentOS 配置环境 (1)虚拟机中安装CentOS,进入系统使用yum命令不止正常执行…… 原因: 需要设置网卡激活 解决方法: vi /etc/sysconfig/network-scr ...

  5. 最短路径之迪杰斯特拉算法(Java)

    1)Dijkstra算法适用于求图中两节点之间最短路径 2)Dijkstra算法设计比较巧妙的是:在求源节点到终结点自底向上的过程中,源节点到某一节点之间最短路径的确定上(这也是我之前苦于没有解决的地 ...

  6. Description POJ1703

    Description The police office in Tadu City decides to say ends to the chaos, as launch actions to ro ...

  7. 笔记-redis安装

    笔记-redis安装配置 1.      redis安装配置 1.1.    windows环境安装 win8已有redis 查看版本:redis-server –version 想更新到5.0.0, ...

  8. 在MAC下使用Robotframework+Selenium2【第二枪】如何处理Table点击指定记录

    1.通过关键字Get Matching Xpath Count获取table中的记录 2.遍历Table所有记录 3.判断记录是否符合条件,做点击操作

  9. Spring Boot :Request请求处理流程

    技术交流群:233513714

  10. Eclipse 视图---Eclipse教程第05课

    关于视图 Eclipse视图允许用户以图表形式更直观的查看项目的元数据. 例如,项目导航视图中显示的文件夹和文件图形表示在另外一个编辑窗口中相关的项目和属性视图. Eclipse 透视图(perspe ...