iOS-Run Loop 浅究

关于Run Loop的了解和学习,查看官方文档是一个不错的选择
Run Loop官方文档


Run Loop 基本作用:
  • 01.保持程序的持续运行
  • 02.处理App中的各种事件(比如触摸事件、定时器事件、Selector事件)
  • 03.节省CPU资源,提高程序性能:该做事时做事,该休息时休息
  • 04.和其他线程进行通信
  • 05.实现定时器功能
  • 06.保持单个线程不死

什么时候调用:(参考官方文档解释)

这里写图片描述

  • 当需要和其他线程的进行通信的时候
  • 当使用timer定时器的时候
  • 当使用performSelector…方法的时候
  • 当保持程序的持续运行和定期执行任务的时候

Run Loop对象的构成
  • NSRunLoop和CFRunLoopRef都代表着RunLoop对象
  • NSRunLoop是基于CFRunLoopRef的一层OC包装

Run Loop与线程之间的关系
  • 每条线程都有唯一的一个与之对应的RunLoop对象
  • 主线程的RunLoop已经自动创建好了,子线程的RunLoop需要主动创建
  • RunLoop在第一次获取时创建,在线程结束时销毁

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

项目中,默认在mian.m中添加了一个Runloop循环,而且这个RunLoop是跟主线程相关联的


Run Loop相关类

Core Foundation中关于RunLoop的5个类

  • CFRunLoopRef —————– // runloop对象
  • CFRunLoopModeRef ——— // 运行模式
  • CFRunLoopSourceRef ——– // 事件源(输入源)
  • CFRunLoopTimerRef ——— // NSTimer
  • CFRunLoopObserverRef —– // 观察者

官方结构图
这里写图片描述


CFRunLoopModeRef 代表 RunLoop的运行模式
  • 一个 RunLoop 包含若干个 Mode,每个Mode又包含若干个Source/Timer/Observer

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

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

常见的2个Mode:

  • kCFRunLoopDefaultMode:App的默认Mode,通常主线程是在这个Mode下运行

  • UITrackingRunLoopMode:界面跟踪 Mode,用于 ScrollView 追踪触摸滑动,保证界面滑动时不受其他 Mode 影响

其他运行模式modes

这里写图片描述


Cocoa Perform Selector Sources(事件源)
  • CFRunLoopSourceRef 是事件源(输入源)
  • Cocoa Perform Selector Sources 的时候会调用

这里写图片描述


Run Loop Observers(观察者)
  • CFRunLoopObserverRef是观察者,能够监听RunLoop的状态改变

这里写图片描述

翻译为 Run Loop 监听时刻

  • 即将进入runloop的时候
  • 即将处理timer定时器的时候
  • 即将处理输入源的时候
  • 当runloop将要休眠的时候
  • 当runloop从休眠中唤醒的时候
  • 当runloop将要退出的时候

Run Loop Timer Sources(定时器)

timer定时器是Run Loop 必不可少的一部分,通过定时器,可以完成事件的循环监听

这里写图片描述

关于timer定时器的学习,将在下一篇博客中写出。


最后引用大牛对Run Loop整体分析图:

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值