美文网首页
Runloop底层整理

Runloop底层整理

作者: 化二缺 | 来源:发表于2020-06-09 11:20 被阅读0次

定义

  • 运行循环

应用范畴

  • 定时器, PerformSelector
  • GCD
  • 事件相应,手势识别,界面刷新
  • 网络强求
  • 自动释放池

RunLoop对象

iOS中有2套API 来访问和使用RunLoop

  • Foundation :NSRunLoop
  • Core Foundation : CFRunLoopRef

RunLoop对象 和线程的关系

  • 每一个线程都有唯一的一个与之对应的runLoop对象
  • RunLoop保存在一个全局的Dictionary 里 ,线程作为key ,RunLoop作value
  • 线程刚创建时候并没有RunLoop对象,RunLoop会在第一次获取它时创建
  • RunLoop会在线程结束时销毁
  • 主线程的RunLoop已经自动获取,子线程默认没有开启RunLoop

RunLoop相关类

  • Core Foundation中关于RunLoop的5个类
  • CFRunLoopRef
  • CFRunLoopModeRef
  • CFRunLoopSourceRef
  • CFRunLoopTimerRef
  • CFRunLoopObserverRef


    image.png
image.png image.png

CFRunLoopModeRef

  • CFRunLoopModeRef 代表 RunLoop 的运行模式
  • 一个RunLoop包含若干个Mode 每个Mode 又包含若干个 Source0/Source1/Timer/Observer
  • RunLoop启动时只能选择其中一个Mode 作为 currentMode
  • 如果需要切换mode 只能退出当前Loop 再重新选择一个mode进入


    image.png
image.png

RunLoop状态

image.png

添加Observer监听 RunLoop的所有状态

image.png image.png

RunLoop的应用

  • 控制线程声明周期(线程保活)
  • 解决NSTimer在滑动时停止工作的问题
  • 监听应用卡顿
  • 性能优化
解决NSTimer在滑动时停止工作的问题
 static int count  = 0 ;
    NSTimer * timer = [NSTimer timerWithTimeInterval:1 repeats:YES block:^(NSTimer * _Nonnull timer) {
       NSLog(@"%d",++count);
    }];
    //NSRunLoopCommonModes 通用模式
    //并不是一个真的模式 只是一个标记
    //timer 在设置了Common标记的模式下都能运行
    [[NSRunLoop currentRunLoop ]addTimer:timer forMode:NSRunLoopCommonModes];

相关文章

  • Runloop底层整理

    定义 运行循环 应用范畴 定时器, PerformSelectorGCD事件相应,手势识别,界面刷新网络强求自动释...

  • iOS底层面试题--RunLoop

    什么是RunLoop? iOS底层面试题--RunLoop RunLoop面试题分析

  • RunLoop简介

    RunLoop简介 RunLoop底层实现原理 RunLoop接收输入事件的2种来源 RunLoop对象 开源的C...

  • Runloop

    Runloop 实现原理及应用iOS - RunLoop 底层源码详解及具体运用

  • Today面试

    Runloop 底层原理Kvo 底层原理ARC 底层原理 如何实现GCD 底层原理Block 底层原理Aut...

  • 探寻RunLoop的本质

    iOS底层原理总结 - RunLoop 面试题 讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑...

  • 底层-RunLoop

    什么是RunLoop 顾名思义 运行循环在程序运行过程中循环做一些事情 应用范畴 定时器(Timer)、Perfo...

  • 底层-RunLoop

    RunLoop的基本作用 1、保持程序的持续运行 2、处理APP中的各种事件(比如触摸事件、定时器事件等) 3、节...

  • RunLoop相关

    iOS底层原理总结 - RunLoop解密 Runloop Runloop是一种在当前线程,持续调度各种任务的运行...

  • RunLoop

    详细文章 xx_cc - iOS底层原理总结 - RunLoop 意一ineyee - RunLoop RunLo...

网友评论

      本文标题:Runloop底层整理

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