iOS RunLoop简介
一、什么是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简介相关推荐
- 【iOS 开发】iOS 开发 简介 (IOS项目文件 | MVC 模式 | 事件响应机制 | Storyboard 控制界面 | 代码控制界面 | Retina 屏幕图片适配)
一. iOS 项目简介 1. iOS 文件简介 创建一个 HelloWorld 项目, 在这个 IOS 项目中有四个目录 : 如下图; -- HelloWorldTests 目录 : 单元测试相关的类 ...
- iOS runloop
iOS runloop 字数1601 阅读6946 评论8 喜欢113 写这篇文章开始之前,我都不知道runloop是什么东西,如果从字面的意思翻译应该是一直循环的跑,怀疑可能和死锁有关系,可是 ...
- iOS RunLoop基础和应用举例
文章目录 RunLoop介绍 iOS 中的RunLoop RunLoop应用举例 保证线程的存活 AFNetworking NSTimer 补充说明 参考文档及更多资料 关于autoreleasepo ...
- 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)
2016年GitHub 排名前 100 的安卓.iOS项目简介(收藏) 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android ...
- iOS UIColor简介
1. UIColor初始化 由白色透明度创建 + (UIColor *)colorWithWhite:(CGFloat)white alpha:(CGFloat)alpha; 由三原色创建 + (UI ...
- iOS RunLoop详解
一.简介 CFRunLoopRef源码 RunLoop是一个对象,这个对象在循环中用来处理程序运行过程中出现的各种事件(比如说触摸事件.UI刷新事件.定时器事件.Selector事件),从而保持程序的 ...
- iOS RunLoop 初识
今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢.当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运 ...
- ios runloop学习
今天突然才之间才意识到NSTimer这样的运行方式,是在多线程中实现的循环还是在主线程中去实现的呢.当然不可能是在主线程中的while那么简单,那样什么都干不了,简单看了下NSTimer是以同步方式运 ...
- Objective-C语法之Objective-C语言和iOS系统(简介,语法,系统结构)
简介 Objective-C,是扩充C的面向对象编程语言.它主要使用于Mac OS Objective-C,通常写作ObjC和较少用的Objective C或Obj-C,是在C的基础上,加入面向对象特 ...
最新文章
- IROS2020 | 面向城市自动驾驶应用的概率语义建图
- 2019年上半年收集到的人工智能迁移学习干货文章
- Linux 集群的deartbeat与drbd服务
- python绘制条形图-python matplotlib库绘制条形图练习题
- 丛高教授《空间数据管理和挖掘及在智慧城市的应用》演讲笔记
- js排序的时间复杂度_经典排序方法的python实现和复杂度分析
- 大牛推荐的5本 Linux 经典必读书
- Python提取.ipynb文件中的Python代码保存为.py文件
- 利用matlab来进行路径规划,matlab路径规划系列
- 中国数字化城市行业现状调研及前景规划分析报告2022~2028年
- 百词斩不复习_不背单词好用还是百词斩好用?
- MySQL中关于超键,主键和候选键的区别
- python sin_Python数字sin()方法
- 如何修改植物大战僵尸文档
- Google adsense单价降低的原因-失误的无效点击过滤
- Linux内核性能剖析的方法学和主要工具
- 3D游戏编程大师技巧+源码
- 嵌入式开发日记(9)——多线程与socket通信
- python绘制动漫人物图片女生可爱_绘画动漫人物图片女生唯美
- wps演示文稿训练心得---实用版
热门文章
- Python实现前端AES加密方式分析,***密码学必备!
- 非对称加密和证书总结
- ant-design-pro Login 中的 UserName 和 Password 的验证规则 rules
- 更上层楼:动态安装你的windows服务
- mpvue开发小程序所遇问题及h5转化方案
- git如何移除某文件的版本控制
- ubuntu数据库安装配置
- [读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性
- Swift语言中class、struct、enum的联系与区别
- 浅析应届女生找工作的一些忧虑和困惑