美文网首页
NSTimer 和 Runloop Mode

NSTimer 和 Runloop Mode

作者: Ever_Blacks | 来源:发表于2016-05-19 14:06 被阅读192次

NSTimer--UITableviewCell


大部分时间都会使用scheduledTimerWithTimeInterval:target:selector:userInfo:repeats来创建Timer,并且大部分时间都是能正常触发的。

但是当Timer和scrollView碰到一起的时候就会出现不能触发的情况,当把Timer的实现改为

_currentTimer = [NSTimer timerWithTimeInterval:1
                                             target:self
                                           selector:@selector(repeatSEL)
                                           userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:_currentTimer forMode:NSRunLoopCommonModes];

Timer就能完美的运行。虽然两次Timer都是在主线程上运行的,和scrollViewy依旧使用同一个Runloop但是因为Mode的不同造成了不同的结果。scheduledTimerWithTimeInterval触发是默认的ModeNSDefaultRunLoopMode


图示可以看出为什么Timer必须加入到Runloop中。因为Timer是也是一种资源,这种资源想起作用必须加入到runloop中,同理如果Runloop中不包含任何资源,运行该Runloop就会立即退出。

另外需要注意的一点就是同一线程的Runloop在运行的时候,任意时刻只能处于同一种mode。所以只能当程序处于这种mode的时候,timer才能得到触发事件的机会。

关于不同的Mode参看下图


相关文章

  • NSTimer 和 Runloop Mode

    NSTimer--UITableviewCell 大部分时间都会使用scheduledTimerWithTimeI...

  • NSTimer的使用

    NSTimer的使用注意一:循环引用问题二:runloop的mode问题三:在子线程中使用时需要启动runloop...

  • 使用CGD创建一个定时器

    CGRunLoopTimerRef是基于时间的触发器,基本上说,就是NSTimer,他受到RunLoop的Mode...

  • CFRunLoopTimerRef 类

    CFRunLoopTimerRef是基于时间的触发器 含义就是:1.NSTimer会受到runloop的mode影...

  • NSTimer、CADisplayLink、GCD定时器

    一、NSTimer NSTimer和CADisplayLink依赖于RunLoop,如果RunLoop的任务过于繁...

  • Runloop应用场景

    创建常驻线程,见AFNetworking; NSTimer定时器创建后需要加入到runloop的mode中才会生效...

  • Runtime 实际运用

    runloop和线程一一对应runloop包含多个mode, mode包含多个 mode item(sources...

  • 性能优化

    循环问题 例如NSTimer,注册了runloop,NSTimer持有self,runloop和线程一一对应,主线...

  • RunLoop

    一、RunLoop是什么二、RunLoop的内部结构 1、RunLoop和线程的关系 2、RunLoop和Mode...

  • 第一篇:RunLoop的一些理论知识

    目录一、什么是RunLoop二、RunLoop和线程的关系三、RunLoop的Mode四、RunLoop的内部逻辑...

网友评论

      本文标题:NSTimer 和 Runloop Mode

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