NStimer 的第一种方法
scheduled方法本质上就是创建一个时钟,添加到运行循环模式NSDefaultRunLoopMode
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(uploadTime:) userInfo:@"hello timer" repeats:YES];
NStimer 的第二种方法
将timer添加到运行循环 模式:默认的运行循环模式 NSDefaultRunLoopMode
self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(uploadTime:) userInfo:@"hello" repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
将timer添加到运行循环 模式:NSRunLoopCommonModes
self.timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(uploadTime:) userInfo:@"hello" repeats:YES];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
从代码上看 运行循环有两种模式
NSDefaultRunLoopMode 一旦发现有滚动事件,定时器停止监听
NSRunLoopCommonModes (滚动, 定时器依旧执行)
NSTimer 准确吗?如果不准确,怎么办?
不准 通常用来有一定事件跨度的周期性事件的处理:
<1> 可以用多线程技术
<2> CADisplayLink 控制事件会更准确