美文网首页
RunLoop简单探索

RunLoop简单探索

作者: 佛祖ohmygod | 来源:发表于2021-04-12 03:26 被阅读0次

RunLoop

  • RunLoop是事件接收和分发机制的一个实现,是线程相关的基础框架的一部分,一个RunLoop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。

  • RunLoop本质是一个 do-while循环,没事做就休息,来活了就干活。与普通的while循环是有区别的,普通的while循环会导致CPU进入忙等待状态,即一直消耗cpu,而RunLoop则不会,RunLoop是一种闲等待,即RunLoop具备休眠功能。 RunLoop的作用

  • 保持程序的持续运行

  • 处理App中的各种事件(触摸、定时器、performSelector)

  • 节省cpu资源,提供程序的性能,该做事就做事,该休息就休息 2、RunLoop和线程的关系

    image.jpeg image.jpeg image.jpeg image.jpeg
image.jpeg

RunLoop和mode是一对多
mode和Item也是一对多


image.jpeg

相关面试题

面试题1当前有个子线程,子线程中有个timer。timer是否能够执行 并进行持续的打印?

image.jpeg


不可以,因为子线程的runloop默认不启动, 需要runloop run启动,需要将上述代码改成下面这样


image.jpeg

面试题2:RunLoop和线程的关系

  • 每个线程都有一个与之对应的RunLoop,所以RunLoop与线程是一一对应的,其绑定关系通过一个全局的DIctionary存储,线程为key,runloop为value。
  • 线程中的RunLoop主要是用来管理线程的,当线程的RunLoop开启后,会在执行完任务后进行休眠状态,当有事件触发唤醒时,又开始工作,即有活时干活,没活就休息
  • 主线程的RunLoop是默认开启的,在程序启动之后,会一直运行,不会退出
  • 其他线程的RunLoop默认是不开启的,如果需要,则手动开启 面试3:NSRunLoop 和 CFRunLoopRef 区别
  • NSRunLoop是基于CFRunLoopRef面向对象的API,是不安全的
  • CFRunLoopRef是基于C语言,是线程安全的 面试5:以+scheduledTimerWithTimeInterval:的方式触发的timer,在滑动页面上的列表时,timer会暂停回调, 为什么?如何解决?
  • timer停止的原因是因为滑动scrollView时,主线程的RunLoop会从NSDefaultRunLoopMode切换到UITrackingRunLoopMode,而timer是添加在NSDefaultRunLoopMode。所以timer不会执行
  • 将timer放入NSRunLoopCommonModes中执行

相关文章

  • RunLoop简单探索

    RunLoop RunLoop是事件接收和分发机制的一个实现,是线程相关的基础框架的一部分,一个RunLoop就是...

  • RunLoop

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

  • RunLoop应用

    在我的另一篇文章RunLoop简单介绍了关于runLoop基础知识和NSTimer时runloop简单应用, 下面...

  • iOS 底层探索

    RunLoopiOS底层探索 --- RunLoop(概念)[https://www.jianshu.com/p/...

  • Runloop相关探索

    Runloop 和 线程 在CFRunloop中已经说明了一个线程及其runloop的对应关系,现在以iOS中NS...

  • RunLoop

    RunLoop 原理 RunLoop 这个对象,在 iOS 里由 CFRunLoop 实现。简单来说,RunLoo...

  • RunLoop

    什么是RunLoop 简单地说RunLoop的作用是,通过RunLoop对象接收事件,执行处理事件。苹果通过Run...

  • iOS RunLoop底层探索

    【原创博文,转载请注明出处!】 CFRunLoopRef源码在此! RunLoop:运行循环,在程序运行过程中循环...

  • 19.猜想runloop内部是如何实现的?

    猜想runloop内部是如何实现的? runloop 本质上就是 event loop 的实现。 简单来说。。。 ...

  • iOS 底层探索之Runloop

    本篇是探索底层Runloop,目的是能够深入理解Runloop是干什么用的?什么时候用?怎么用? 1、什么是run...

网友评论

      本文标题:RunLoop简单探索

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