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参看下图