美文网首页
RunLoop初谈

RunLoop初谈

作者: 海上飞鸟 | 来源:发表于2020-11-11 18:15 被阅读0次

RunLoop是iOS开发过程中非常基础的一个概念,本文就简单说下RunLoop,也算是自己做的一个笔记,如有不对之处请指出。

RunLoop是什么?

我们都知道一个线程在执行完它的任务之后就会退出,那如果想要执行完任务不退出,下次有任务时线程还可以正常使用。这种模型称之为Event Loop。实现这种模型的关键就在于如何让它在有任务的时候处理任务,没有任务的时候进行休眠。

所以RunLoop就是一个对象,这个对象管理来需要处理的事件和消息。

RunLoop_0.png

如上图所示,RunLoop是由多个Mode组成,而每个Mode又分为若干个Source/Obsever/Timer组成。
每次启用RunLoop时只能指定一种Mode。如果需要切换只能退出RunLoop,然后重新启动指定一个Mode。

RunLoop的mode又哪些?

Mode一共分为5种,如下:

  1. NSDefaultRunLoopMode:默认的Mode,通常主线程在这个Mode下运行。
  2. UITrackingRunLoopMode:对应的是UI素材UIScrollView等UI控件滑动屏幕时对应的Mode。
  3. NSRunLoopCommonModes:这是一种标记,标记成为NSDefaultRunLoopMode和UITrackingRunLoopMode。
  4. UIInitializationRunLoopMode:这种是在APP启动时进入的第一个Mode,启动完成后就不会再进入了。
  5. GSEventReceiveRunLoopMode:接受系统内部事件的Mode,开发中用不到。

对于上面的5种Mode,后两种没有用到过。

RunLoop的简单应用

使用NSTimer时添加到runloop中

第一种,也是我们经常直接使用的。

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];

使用这种的话,相当于系统会自动添加到runloop中,并且对应的Mode为NSDefaultRunLoopMode,当我们滑动UIScrollView等控件时,定时器方法就不执行了。

第二种,自行添加到runloop中。

NSTimer *timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerMethod) userInfo:nil repeats:YES];

[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

可以使用我们想要的Mode进行设置。

相关文章

  • RunLoop初谈

    RunLoop是iOS开发过程中非常基础的一个概念,本文就简单说下RunLoop,也算是自己做的一个笔记,如有不对...

  • 菜鸟教程——深入理解RunLoop

    前段一直在忙琐事,今天闲下来写点东西,今天主要谈一下RunLoop。 一、什么是RunLoop RunLoop顾名...

  • RunLoop初窥

    RunLoop 基本作用: 保持程序的持续运行 处理App中的各种事件(比如触摸、定时器、selector事件) ...

  • RunLoop

    不会执行test方法主要是runloop没有开启。 1、全局变量保存各个线程和各个 RunLoop 对象的关系,初...

  • 谈 初

    初,一个简单又深刻的字。说起初,便有了初春,眼前就是“天街小雨润如酥”的景象,朦胧又不失美感。说起初,便有...

  • RunLoop

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

  • 2019 iOS面试题-----RunLoop数据结构、RunL

    RunLoop概念 RunLoop的数据结构 RunLoop的Mode 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...

网友评论

      本文标题:RunLoop初谈

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