美文网首页
Timer和Runloop

Timer和Runloop

作者: Jonas_Lin | 来源:发表于2018-05-11 09:24 被阅读0次

1、runloop是什么?

runloop是事件接收和分发机制的一种实现。

runloop是线程的基础组成部分,一个runloop就是一个事件处理循环,用来不断的处理输入事件和调配工作,使用runloop的目的是为了让线程在有工作的时候工作,没有工作的时候休眠,从而节约资源。runloop单从其工作内容来看和快递的中转站有很大的相似之处。

2、runloop和线程的关系

runloop是线程的基础组成部分,每个线程都默认拥有一个runloop对象,但是只有主线程的runloop对象是默认就存在且默认是打开的,其他线程的runloop对象只有在第一次获取runloop对象时才会创建而且默认是关闭状态,需要我们手动调用run方法运行。

3、timer和runloop之间的渊源

我们创建timer时,之所以timer能运行,是因为创建timer时,一般情况下,是在主线程中创建,这时会默认将timer以defaultRunloopModel的类型加入主线程,而主线程的runloop对象默认是打开的,从而timer可以运行。

4、为什么我们在滑动屏幕上的scrollerView和tableview的timer会停止运行?

一个runloop对象包含多个model,每个model又拥有各自的source/timer/observer,每次调用runloop时只能指定一个model,如果想要切换model,必须先退出runloop,然后重新指定一种model进入,而timer之所以会停止运行,就是因为timer是注册在defaultRunloopModel类型上的,当屏幕滑动时,线程默认会将model切换到trackingRunloopModel,当停止滑动时,又会切换回defaultModel。(当用户正在滑动 UIScrollView 时,RunLoop 将切换到UITrackingRunLoopMode接受滑动手势和处理滑动事件(包括减速和弹簧效果),此时,其他 Mode (除 NSRunLoopCommonModes 这个组合 Mode)下的事件将全部暂停执行,来保证滑动事件的优先处理,这也是 iOS 滑动顺畅的重要原因)

5、怎样滑动屏幕上的scrollerView和tableview的timer停止问题

方法1:创建一条新的线程,然后将timer加入到新创建线程对应的runloop对象中即可。

方法2:依旧是将timer注册在主线程的runloop中,不过注册的model类型为commonModels,之所以加入到commonModels中就行,是因为commonModels是一种公用的类型,每当runloop内容发生改变时,runloop会将commonModels类型下所有注册的内容同步到对应的model中。

相关文章

  • NSTimer不准的问题及解决

    Runloop Timer为什么不准? 1:Runloop Timer底层使用的timer精度不高;2:与Runl...

  • NSTimer不准的问题及解决

    Runloop Timer为什么不准?1:Runloop Timer底层使用的timer精度不高;2:与Runlo...

  • Timer和Runloop

    1、runloop是什么? runloop是事件接收和分发机制的一种实现。 runloop是线程的基础组成部分,一...

  • RunLoop

    讲讲 RunLoop,项目中有用到吗? RunLoop内部实现逻辑? RunLoop和线程的关系? timer 与...

  • 浅谈RunLoop

    面试题 讲讲runloop,项目中有用到吗? runloop内部实现逻辑 runloop和线程的关系 timer和...

  • IOS开发中常用的计时器

    Timer 需要注意,Timer需要加入RunLoop才会开启,并且设置RunLoop.Mode = .commo...

  • RunLoop与Timer的使用

    Timer是Runloop的一个触发源,用Timer时, Timer默认添加到当前的Runloop中,也可以手动添...

  • RunLoop的使用

    RunLoop是什么? 它有什么作用?Runloop和多线程又是什么关系?timer 与 Runloop 有什么关...

  • iOS-面试题 runloop(夯实基础学习笔记-温故知新3)

    讲讲 RunLoop,项目中有用到吗?runloop内部实现逻辑?runloop和线程的关系?timer 与 ru...

  • NSRunloop 认识

    timer和runloop runloop的模式分为5种 系统默认定义了多种运行模式(CFRunLoopModeR...

网友评论

      本文标题:Timer和Runloop

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