RunLoop简单笔记

RunLoop相关类

  1. CFRunLoopRef
  2. CFRunLoopModeRef
    • runloop运行模式
    • 在runloop中可能有多个mode ,runloop运行中只能有一个__mode__, __mode__中包括 source,timer,Observer(监听runloop的状态)
  3. CFRunLoopSourceRef
    • 事件源
    • 输入源
  4. CFRunLoopTimerRef
    • 定时器事件
  5. CFRunLoopObserverRef
    • 能够监听RunLoop的状态改变
  6. CFRunLoopModeRef
    • 它是RunLoop的运行模式

默认注册5个Mode

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

GCD中的运行时

  1. 创建GCD中的定时器
    • 第一个参数; source 的类型DISPATCH_SOURCE_TYPE_TIMER 表示是定时器
    • 第二个参数: 描述信息,线程ID
    • 第三个参数:更详细的描述信息
    • 第四个参数: 队列,决定GCD定时器中的任务在哪个线程中执行
    dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0,0,
    dispatch_get_global_queue(0,0));
  1. 设置定时器(起始事件| 间隔事件|精准度)
    • 第一个参数: 定时器对象
    • 第二个参数: 起始事件, DISPATCH_TIME_NOW 从现在开始计时
    • 第三个参数: 间隔事件, 2.0, GCD中事件单位为纳秒
    • 第四个参数: 精准度 绝对精准 0

GCD定时器的好处

  1. GCD定时器是绝对精准的
  2. 相对于NSTimer不会被当前模式的影响

RunLoop 内部实现机制

RunLoop 应用

  1. NSTimer
  2. imageView显示
  3. PerformSelector
  4. 常驻线程
  5. 自动释放池
// 创建线程
   self.thread = [[NSThread alloc]initWithTarget:self selector:@selector(task1),object:nil];
   [self.thread start];

什么是RunLoop

  • 运行循环
  • 它内部就是do-while,在这个循环内部不断的处理各种任务(比如Source、Timer、Observer)
  • 一个线程对应一个RunLoop,住县城的Runloop默认启动,自线程得手动启动(调用run方法)
  • Runloop 只能选择一个Mode启动,如果当前没有任何Source(Source0、Source1…)、Timer,那么就直接退出RunLoop

自动释放池什么时候释放

  1. 第一次创建: 启动RunLoop
  2. 最后一次销毁: runloop退出的时候
  3. 其他时候的创建和销毁: 当runloop即将睡眠的时销毁之前的释放池,重新创建一个新的

runloop在实际开发中的应用场景

  • 开启一个常驻线程

    1. 在子线程中开启一个定时器
    2. 在子线程中进行一些长期监控
  • 可以控制定时器在特定模式下执行

  • 可以让某些事件(行为、任务)在特定模式下执行

  • 可以添加Observer监听Runloop的状态,比如监听点击事件处理(在所有点击事件之前做一些事情)

更加深入的讲解

  1. 深入理解RunLoop
  2. 苹果官方文档
  3. CFRunLoop.h文件
  4. CFRunLoop.c文件
  5. CF框架开源文件

转载于:https://my.oschina.net/zboy/blog/1801015

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值