美文网首页
2018-09-20iOS 以scheduledTimerWit

2018-09-20iOS 以scheduledTimerWit

作者: sayangH | 来源:发表于2018-09-20 14:51 被阅读0次

原因在于滑动时当前线程的runloop切换了mode用于列表滑动,导致timer暂停。

runloop中的mode主要用来指定事件在runloop中的优先级,有以下几种:

Default(NSDefaultRunLoopMode):默认,一般情况下使用;Connection(NSConnectionReplyMode):一般系统用来处理NSConnection相关事件,开发者一般用不到;Modal(NSModalPanelRunLoopMode):处理modal panels事件;Event Tracking(NSEventTrackingRunLoopMode):用于处理拖拽和用户交互的模式。Common(NSRunloopCommonModes):模式合集。默认包括Default,Modal,Event Tracking三大模式,可以处理几乎所有事件。

回到题中的情境。滑动列表时,runloop的mode由原来的Default模式切换到了Event Tracking模式,timer原来好好的运行在Default模式中,被关闭后自然就停止工作了。

解决方法其一是将timer加入到NSRunloopCommonModes中。其二是将timer放到另一个线程中,然后开启另一个线程的runloop,这样可以保证与主线程互不干扰,而现在主线程正在处理页面滑动。示例代码如下:

// 方法1[[NSRunLoopcurrentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];// 方法2dispatch_async(dispatch_get_global_queue(0,0), ^{    timer = [NSTimerscheduledTimerWithTimeInterval:1target:selfselector:@selector(repeat:) userInfo:nilrepeats:true];    [[NSRunLoopcurrentRunLoop] run];});

作者:Silence_广

链接:https://www.jianshu.com/p/15db5e5f2c49

來源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

相关文章

  • 2018-09-20iOS 以scheduledTimerWit

    原因在于滑动时当前线程的runloop切换了mode用于列表滑动,导致timer暂停。 runloop中的mode...

  • NSTimer和运行循环

    //1.本质上就是创建一个时钟,以默认的模式添加到运行循环中 [NSTimer scheduledTimerWit...

  • NSTimer

    创建NSTimer 创建NSTimer的常用方法是: + (NSTimer *)scheduledTimerWit...

  • iOS NSTimer 详解(runloop,timer销毁)

    关于timer的调用分为两种 timerWithTimeInterval 开头 scheduledTimerWit...

  • 日以记,以思,以传神

    不知道为什么,突然就想写这么一个日记册。一是不想这么颓废地过了,每天记录点东西作为反思,也充当《了凡四训》的功过格...

  • 以平静,以勇敢

    意外丧偶……来不及说再见……深受打击……怀疑人生……慢慢接受……沉淀悲伤……修炼复原力……逐渐走出阴霾……这...

  • 以以已独

    夜以深,晚以静。 你已睡,我独醒。 烟以灭,情以尽。 路已空,我独在。 床以暖,心以冷。 酒已喝,我独醉。 念以俱...

  • 以享以祀

    群里见到有人发了两句话,试着译了一下,没有想到内容居然是真的!而且文字的表现手法非常奇特,很像是金文时代的产物,估...

  • 以自由以独立

    学习英语遇到了瓶颈 一是学习时间不够 二是没有找到合适的语境 学习棋类也遇到了瓶颈 一是时间不够 二是无论是学英语...

  • 以日以年

网友评论

      本文标题:2018-09-20iOS 以scheduledTimerWit

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