使用的时候一定要加到RunLoop
里的NSEventTrackingRunLoopMode
模式
不然NSTimer
可能会暂停计时
特别是页面有UITableView
或者UIScrollView
因为NSTimer
创建的时候会默认加入到RunLoop
里 NSDefaultRunLoopMode
模式里
但是当界面出现滑动的时候
RunLoop
模式会发生改变
变成NSEventTrackingRunLoopMode
模式
所以当页面滑动的时候就不会去执行
解决办法就是创建完成之后
手动加入RunLoop
里NSEventTrackingRunLoopMode
模式里
这样界面出现滑动的时候就没问题了
1 | NSTimer *timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(add) userInfo:nil repeats:YES]; |
为什么是NSRunLoopCommonModes
因为NSRunLoopCommonModes
包含很多模式
还有就是NSTimer
会对self
强引用
一定要及时置空
1 | [timer invalidate]; |