Runloop应用:Timer失效问题
2017-08-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];