目录

  • 概述

  • 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. Large-scale Scene Understanding (LSUN)

    Large-scale Scene Understanding (LSUN) http://lsun.cs.princeton.edu/#organizers http://sunw.csail.mi ...

  2. 8、SpringBoot+Mybatis整合------参数取值方式

    前言: 我们知道,在mybatis中,参数取值方式有两种: #{ } 和 ${ } 下面,我们来探讨下#{ }与${ }不同. 一.#{ } 例: select * from student wher ...

  3. tomcat.apache startup.bat闪退两种解决方法

    tomcat bin文件夹中的startup.bat闪退原因及解决方法两种 方法一:在启动tomcat时闪退,重新检查java的jre运行环境.如果环境变量忘记配置一定会导致了tomcat的闪退. 追 ...

  4. 实战 Lucene2.0

    Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能.Lucene 目前是 Apache Jakarta 家 ...

  5. Java连接数据库的一个问题

    问题描述: 利用HTML+servlet+MySQL写一个简单的登录注册案例,抛出了异常No suitable driver found for jdbc 解决方法 将mysql-connector- ...

  6. selenium webdriver 移动到某个位置,滚动到某个位置

    https://blog.csdn.net/xiaosongbk/article/details/70231564

  7. 想学习一下node.js,重新安装配置了node

    根据这个网站上的教程安装配置的,还不错一次就成功了.觉得安装没什么,就是配置路径的时候容易错. http://www.runoob.com/nodejs/nodejs-install-setup.ht ...

  8. 裸机——Nand

    1.首先需要知道Nand的基础知识 从Nand的芯片手册可以获得 我使用的芯片手册是 K9F2G08 首先从芯片手册的名称可以获得信息: K9F:三星 2G   : 2Gb (256MB) 08    ...

  9. CentOS 使用 LAMP 环境开启 SSL 搭建 WordPress

    环境阿里云新装CentOS 7.4, 使用yum(非编译安装)搭建LAMP, CA证书为阿里云免费提供的, WordPress为官网下载 安装 LAMP 并开启 HTTPS 1, 关闭防火墙 # sy ...

  10. Idea搭建spring framework源码环境

    spring的源码目前放在github上,https://github.com/spring-projects/spring-framework 一.安装Git 二.安装Gradle gradle为解 ...