美文网首页
RunLoop相关

RunLoop相关

作者: 萝卜丝巾 | 来源:发表于2020-08-13 10:58 被阅读0次


引文:


  1. 概念

  2. 数据结构

  3. 事件循环

  4. Runloop与NSTimer

  5. Runloop与多线程


概念:

runloop 是由系统内部维护的事件循环对消息/事件进行管理的对象

没有消息需要处理时,系统进入休眠状态,节约资源.

用户态 --> 内核态

如果有消息需要处理,会被立即唤醒 (手动唤醒/NSTimer/Source1)

内核态 --> 用户态
image.png
image.png
数据结构

NSRunLoop是对CFRunLoop的封装,提供了面向对象的api.
CFRunLoopRef 是在 CoreFoundation 框架内的,它提供了纯 C 函数的 API,所有这些 API 都是线程安全的。
NSRunLoop 是基于 CFRunLoopRef 的封装,提供了面向对象的 API,但是这些 API 不是线程安全的。

  • CFRunLoop

  • CFRunLoopMode

  • Source/Timer/Observer

CFRunLoop

image.png

CFRunLoopTimer

是基于时间的触发器,它和 NSTimer 是toll-free bridged 的,可以混用。其包含一个时间长度和一个回调(函数指针)。当其加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。


CFRunLoopObserver

观测时间点

typedef CF_OPTIONS(CFOptionFlags, CFRunLoopActivity) {
    kCFRunLoopEntry         = (1UL << 0), // 即将进入Loop
    kCFRunLoopBeforeTimers  = (1UL << 1), // 即将处理 Timer
    kCFRunLoopBeforeSources = (1UL << 2), // 即将处理 Source
    kCFRunLoopBeforeWaiting = (1UL << 5), // 即将进入休眠
    kCFRunLoopAfterWaiting  = (1UL << 6), // 刚从休眠中唤醒
    kCFRunLoopExit          = (1UL << 7), // 即将退出Loop
};

一个RunLoop对象可以对应多个Model, 每个Model 又有多个source/timer/observer

image.png
CommonMode 的特殊性

NSRunLoopCommonModes

  • CommonMode不是实际存在的一种Mode.

  • 是同步Source/Timer/Observer到多个Mode中的一种技术方案


事件循环机制:
image.png
RunLoop和NSTimer

滑动tableview的时候定时器还会生效吗?
当滑动tableview的时候定时器会从kCFRunLoopDefaultMode 切换到UITrackingRunLoopMode


怎么实现一个常驻线程
为当前线程开始runloop
向该runloop中添加port/Source维护runloop的事件循环\
启动该runloop

相关文章

  • RunLoop

    RunLoop简单概述 RunLoop相关类 RunLoop逻辑处理 RunLoop实践 RunLoop简单概述 ...

  • iOS RunLoop(1)RunLoop简介

    iOS RunLoop(1)RunLoop简介iOS RunLoop(2)RunLoop相关类iOS RunLo...

  • iOS RunLoop(2)RunLoop相关类

    iOS RunLoop(1)RunLoop简介iOS RunLoop(2)RunLoop相关类iOS RunLo...

  • iOS RunLoop(3)RunLoop原理

    iOS RunLoop(1)RunLoop简介iOS RunLoop(2)RunLoop相关类iOS RunLo...

  • iOS RunLoop(4)RunLoop实战应用

    iOS RunLoop(1)RunLoop简介iOS RunLoop(2)RunLoop相关类iOS RunLo...

  • 深入浅出 RunLoop

    前言 文章主要分为四个部分 一、RunLoop 简介 二、RunLoop 相关接口 三、RunLoop 相关逻辑流...

  • 14-RunLoop-01

    一、RunLoop的认识 二、RunLoop对象 RunLoop源码: 三、RunLoop相关类 切换mode不会...

  • dailyLearning -- runLoop

    runLoop runLoop 对外的接口及相关类 runLoop 内部逻辑 runLoop 可以做啥 runLo...

  • RunLoop

    基本概念RunLoop相关类RunLoop的作用RunLoop和线程的关系RunLoop和autoreleasep...

  • RunLoop的介绍

    本文介绍的RunLoop包含以下几个点: 一、什么是RunLoop二、RunLoop对象三、 RunLoop相关的...

网友评论

      本文标题:RunLoop相关

      本文链接:https://www.haomeiwen.com/subject/ulrbdktx.html