一、什么是RunLoop?

RunLoop是运行循环,每个Cocoa应用程序都由一个处于阻塞状态的do/while循环驱动,当有事件发生时,就把事件分派给合适的监听器,如此反复直到循环停止。处理分派的对象就叫做“运行循环”。

基本作用:1、保持程序的持续运行 2、处理App中的各种事件(比如触摸事件、定时器事件、Selector事件)3、节省CPU资源,提高程序性能:该做事时做事,该休息时休息。

二、RunLoop的基础

    每条线程都有唯一的一个与之对应的RunLoop对象

  主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建

  RunLoop在第一次获取时创建,在线程结束时销毁。

  2.1获得RunLoop对象

  1、Foundation

  [NSRunLoop currentRunLoop]; // 获得当前线程的RunLoop对象

  [NSRunLoop mainRunLoop]; // 获得主线程的RunLoop对象

  2、Core Foundation

  CFRunLoopGetCurrent(); // 获得当前线程的RunLoop对象

  CFRunLoopGetMain(); // 获得主线程的RunLoop对象

  2.2 Core Foundation中关于RunLoop的5个类

  CFRunLoopRef、CFRunLoopModeRef、CFRunLoopSourceRef、CFRunLoopTimerRef、CFRunLoopObserverRef

  2.2.1 CFRunLoopModeRef代表RunLoop的运行模式

  一个 RunLoop 包含若干个 Mode,每个Mode又包含若干个Source/Timer/Observer

  每次RunLoop启动时,只能指定其中一个 Mode,这个Mode被称作 CurrentMode

  如果需要切换Mode,只能退出Loop,再重新指定一个Mode进入

  这样做主要是为了分隔开不同组的Source/Timer/Observer,让其互不影响

  • 系统默认注册了5个Mode:
  • kCFRunLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行
  • UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响
  • UIInitializationRunLoopMode: 在刚启动 App 时第进入的第一个 Mode,启动完成后就不再使用
  • GSEventReceiveRunLoopMode: 接受系统事件的内部 Mode,通常用不到
  • kCFRunLoopCommonModes: 这是一个占位用的Mode,不是一种真正的Mode

  2.2.2 CFRunLoopSourceRef是事件源(输入源)

  • 以前的分法
  • Port-Based Sources
  • Custom Input Sources
  • Cocoa Perform Selector Sources
  • 现在的分法
  • Source0:非基于Port的
  • Source1:基于Port的

  2.2.3 CFRunLoopTimerRef是基于时间的触发器

  • 基本上说的就是NSTimer

  2.2.4 CFRunLoopObserverRef是观察者,能够监听RunLoop的状态改变

  • 可以监听的时间点有以下几个

  

三、RunLoop处理逻辑

iOS RunLoop简介的更多相关文章

  1. iOS RunLoop详解

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

  2. 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)

    一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...

  3. ios -RunLoop(简单理解)

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

  4. iOS多线程-RunLoop简介

    什么是RunLoop? 从字面上来看是运行循环的意思. 内部就是一个do{}while循环,在这个循环里内部不断的处理各种任务(比如:source/timer/Observer) RunLoop的存在 ...

  5. ios runloop学习

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

  6. 【转】GitHub 排名前 100 的安卓、iOS项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  7. 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)

    排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者 ...

  8. IOS AFNetworking简介及使用

    转:http://www.it165.net/pro/html/201405/13099.html 一AFNetworking简介AFNetworking是一个在IOS开发中使用非常多网络开源库,适用 ...

  9. ios - cordova 简介

    Cordova 是一个可以让 JS 与原生代码(包括 Android 的 java,iOS 的 Objective-C 等)互相通信的一个库,并且提供了一系列的插件类,比如 JS 直接操作本地数据库的 ...

随机推荐

  1. hudson部署过程

    hudson部署过程: java安装 http://developer.51cto.com/art/201504/470683.htm tomcat安装 http://blog.csdn.net/hu ...

  2. samba服务器安装,共享nginx目录

    Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,类似于win的网上邻居,让windows和linux实现文件共享 1.安装smaba服务 yum install samba ...

  3. 学用MVC4做网站六后台管理:6.1.3管理员修改密码

    6.1.3修改密码 需要两个action.一个是点击修改密码的链接要显示修改密码的分部视图(对话框形式):另一个是提交的处理action. 1.打开[AdministratorController]添 ...

  4. 在浏览器中输入URL按下回车键后发生了什么

    在浏览器中输入URL按下回车键后发生了什么 [1]解析URL[2]DNS查询,解析域名,将域名解析为IP地址[3]ARP广播,根据IP地址来解析MAC地址[4]分别从应用层到传输层.网络层和数据链路层 ...

  5. android:theme决定AlertDialog的背景颜色

    最近遇到一个很奇怪的问题,两个项目弹出的dialog背景颜色不一样,一个是黑色的,一个是白色的,最后发现是AndroidManifest.xml文件里面application指定的android:th ...

  6. 【重磅开源】Hawk-数据抓取工具:简明教程

    Hawk-数据抓取工具:简明教程 标签(空格分隔): Hawk Hawk: Advanced Crawler& ETL tool written in C#/WPF 1.软件介绍 HAWK是一 ...

  7. Android随笔之——Android ADB详解

    ADB全称Android Debug Bridge, 是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的andriod设备.它主要有以下几个功能: 1.运 ...

  8. 高级javascript---严格模式

    严格模式 (JavaScript)   严格模式是一种将更好的错误检查引入代码中的方法. 在使用严格模式时,你无法使用隐式声明的变量.将值赋给只读属性或将属性添加到不可扩展的对象等. 本主题后面的代码 ...

  9. jquery实现分页功能

    RT,不是很难,但是感觉代码一点都不简洁,就是多加点判断,直接上代码了. HTML部分: <div class = "container-fluid"> <div ...

  10. 你真的会玩SQL吗?删除重复数据且只保留一条

    在网上看过一些解决方法 我在此给出的方法适用于无唯一ID的情形 表:TB_MACVideoAndPicture 字段只有2个:mac,content mac作为ID,正常情况下mac数据是唯一的,由于 ...