一、什么是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;

CFRunLoopSourceRef是事件源(输入源);

以前的分法;

Port-Based Sources;

Custom Input Sources;

Cocoa Perform Selector Sources;

现在的分法;

Source0:非基于Port的;

Source1:基于Port的;

CFRunLoopTimerRef是基于时间的触发器;

基本上说的就是NSTimer;

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

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

  

三、RunLoop处理逻辑

iOS RunLoop简介相关推荐

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

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

  2. iOS runloop

    iOS runloop 字数1601 阅读6946 评论8 喜欢113    写这篇文章开始之前,我都不知道runloop是什么东西,如果从字面的意思翻译应该是一直循环的跑,怀疑可能和死锁有关系,可是 ...

  3. iOS RunLoop基础和应用举例

    文章目录 RunLoop介绍 iOS 中的RunLoop RunLoop应用举例 保证线程的存活 AFNetworking NSTimer 补充说明 参考文档及更多资料 关于autoreleasepo ...

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

    2016年GitHub 排名前 100 的安卓.iOS项目简介(收藏)   排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android ...

  5. iOS UIColor简介

    1. UIColor初始化 由白色透明度创建 + (UIColor *)colorWithWhite:(CGFloat)white alpha:(CGFloat)alpha; 由三原色创建 + (UI ...

  6. iOS RunLoop详解

    一.简介 CFRunLoopRef源码 RunLoop是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件.UI刷新事件.定时器事件.Selector事件),从而保持程序的 ...

  7. iOS RunLoop 初识

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

  8. ios runloop学习

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

  9. Objective-C语法之Objective-C语言和iOS系统(简介,语法,系统结构)

    简介 Objective-C,是扩充C的面向对象编程语言.它主要使用于Mac OS Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是在C的基础上,加入面向对象特 ...

最新文章

  1. IROS2020 | 面向城市自动驾驶应用的概率语义建图
  2. 2019年上半年收集到的人工智能迁移学习干货文章
  3. Linux 集群的deartbeat与drbd服务
  4. python绘制条形图-python matplotlib库绘制条形图练习题
  5. 丛高教授《空间数据管理和挖掘及在智慧城市的应用》演讲笔记
  6. js排序的时间复杂度_经典排序方法的python实现和复杂度分析
  7. 大牛推荐的5本 Linux 经典必读书
  8. Python提取.ipynb文件中的Python代码保存为.py文件
  9. 利用matlab来进行路径规划,matlab路径规划系列
  10. 中国数字化城市行业现状调研及前景规划分析报告2022~2028年
  11. 百词斩不复习_不背单词好用还是百词斩好用?
  12. MySQL中关于超键,主键和候选键的区别
  13. python sin_Python数字sin()方法
  14. 如何修改植物大战僵尸文档
  15. Google adsense单价降低的原因-失误的无效点击过滤
  16. Linux内核性能剖析的方法学和主要工具
  17. 3D游戏编程大师技巧+源码
  18. 嵌入式开发日记(9)——多线程与socket通信
  19. python绘制动漫人物图片女生可爱_绘画动漫人物图片女生唯美
  20. wps演示文稿训练心得---实用版

热门文章

  1. Python实现前端AES加密方式分析,***密码学必备!
  2. 非对称加密和证书总结
  3. ant-design-pro Login 中的 UserName 和 Password 的验证规则 rules
  4. 更上层楼:动态安装你的windows服务
  5. mpvue开发小程序所遇问题及h5转化方案
  6. git如何移除某文件的版本控制
  7. ubuntu数据库安装配置
  8. [读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性
  9. Swift语言中class、struct、enum的联系与区别
  10. 浅析应届女生找工作的一些忧虑和困惑