美文网首页iOS高级进阶
Runloop应用:Timer失效问题

Runloop应用:Timer失效问题

作者: 南城同學 | 来源:发表于2017-08-14 09:14 被阅读0次
背景:
  • 添加Timer,当拖动tableView的时候,timer失效。
失效原因:
  • runloop有两种model:kCFRunLoopDefaultMode(NSDefaultRunLoopMode)(App的默认Mode,通常主线程是在这个Mode下运行)和UITrackingRunLoopMode(界面跟踪 Mode,用于 ScrollView 追踪触摸滑动);
  • 而 Timer 是在model中;
  • 常规的添加timer方法,只添加在了kCFRunLoopDefaultMode(NSDefaultRunLoopMode)中,拖动tableView时,model切换为UITrackingRunLoopMode,而里面没有定义Timer,所以timer就失效了。
解决:
  • 给两种model都添加timer:
  NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
      
    }];
 [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

相关文章

  • Runloop源码解析:运行逻辑

    Runloop应用: Timer失效问题; 线程保活; Runloop的运行逻辑: 入口函数 通知Observer...

  • Runloop应用:Timer失效问题

    方法: - (void)setValue:(id)value forKeyPath:(NSString *)key...

  • UIScrollView+NSTimer

    UIScrollView滚动时,Timer不失效的方法1、改变当前RunLoop的mode 2、在主线程中定义Ti...

  • NSTimer不准的问题及解决

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

  • NSTimer不准的问题及解决

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

  • GCD

    问题 主要是runloop的原理以及核心源代码 gcd的原理及应用,source的原理为什么比timer更精准; ...

  • 破解 NSTimer 的强引用

    问题 很多人都知道, Timer 会通过 Runloop 对 target 进行强引用, 需要手动对 Timer ...

  • NSTimer 使用

    使用timer需要注意的问题: timer 会retain 你添加调用方法的对象timer需要添加到runLoop...

  • IOS开发中常用的计时器

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

  • RunLoop与Timer的使用

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

网友评论

    本文标题:Runloop应用:Timer失效问题

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