iOS开发之计时器
2016-05-26 11:40
459 查看
iOS开发中,我们涉及到的计时器为3种,GCD计时器,CADisplayLink计时器,NSTimer计时器。
GCD计时器
特性:NSTimer有延迟,不是特别准确,所以如果要求特别高的情况下,我们可以用GCD计时器和CADisplayLink计时器;
创建计时器
dispatch_source_t timer
设置计时器
dispatch_source_set_timer
触发事件
dispatch_source_set_event_handler
结束计时器
dispatch_source_set_cancel_handler
开启计时器
dispatch_resume(timer);
CADisplayLink计时器
特性:根据屏幕刷新的频率进行刷新,所以如果屏闪稳定,那么CADisplayLink的计时器就会很准确,除非屏幕达到20HZ以下,就会不准确;
创建计时器
CADisplayLink *displaylink = [CADisplayLink displayLinkWithTarget:self selector:@selector(……)];
添加到当前线程 -> (添加到线程就能正常工作了)
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
停止方法
[displayLink incalidate];
NSTimer定时器
1.不用添加到runloop中
创建计时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector(……)] userInfo:nil repeats:YES];
释放定时器
[timer invalidate];
暂停
[self.timer setFireDate:[NSDate distantPast]];
继续
[self.timer
setFireDate:[NSDate
distantFuture]];
2.需要添加到runloop中
创建对象
NSTimer *myTimer = [NSTimertimerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:)userInfo:nilrepeats:NO];
添加到线程中
[[NSRunLoopcurrentRunLoop]addTimer:myTimerforMode:NSDefaultRunLoopMode];
触发(启动)
当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。
可以使用-(void)fire;方法来立即触发该定时器;
停止
就用[timer invalidate];NSTimer释放
GCD计时器
特性:NSTimer有延迟,不是特别准确,所以如果要求特别高的情况下,我们可以用GCD计时器和CADisplayLink计时器;
创建计时器
dispatch_source_t timer
设置计时器
dispatch_source_set_timer
触发事件
dispatch_source_set_event_handler
结束计时器
dispatch_source_set_cancel_handler
开启计时器
dispatch_resume(timer);
CADisplayLink计时器
特性:根据屏幕刷新的频率进行刷新,所以如果屏闪稳定,那么CADisplayLink的计时器就会很准确,除非屏幕达到20HZ以下,就会不准确;
创建计时器
CADisplayLink *displaylink = [CADisplayLink displayLinkWithTarget:self selector:@selector(……)];
添加到当前线程 -> (添加到线程就能正常工作了)
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
停止方法
[displayLink incalidate];
NSTimer定时器
1.不用添加到runloop中
创建计时器
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector(……)] userInfo:nil repeats:YES];
释放定时器
[timer invalidate];
暂停
[self.timer setFireDate:[NSDate distantPast]];
继续
[self.timer
setFireDate:[NSDate
distantFuture]];
2.需要添加到runloop中
创建对象
NSTimer *myTimer = [NSTimertimerWithTimeInterval:3.0 target:selfselector:@selector(timerFired:)userInfo:nilrepeats:NO];
添加到线程中
[[NSRunLoopcurrentRunLoop]addTimer:myTimerforMode:NSDefaultRunLoopMode];
触发(启动)
当定时器创建完(不用scheduled的,添加到runloop中后,该定时器将在初始化时指定的timeInterval秒后自动触发。
可以使用-(void)fire;方法来立即触发该定时器;
停止
就用[timer invalidate];NSTimer释放
相关文章推荐
- iOS 极光推送
- 利用anchorPoint和position实现缩放
- IOS 使用容联视频时隐藏本地视频,不让对方看到自己
- iOS 静态库,动态库与 Framework 浅析
- iOS开发之获取运营商和WIFI
- iOS制作演示gif
- iOS配置SSO授权
- 关于10.11不能安装CocoaPods的问题
- iOS 分享功能开发
- iOS开发之获取手机型号
- iOS或去平米分辨率 以及放大模式、高清模式
- iOS开发之获取本地沙盒等基本路径
- iOS开发之多线程了解
- sps pps AudioSpecificConfig
- iOS基础笔试题 - 集锦二
- iOS基础笔试题 - 集锦一
- IOS之本地推送
- iOS新特性之实现3D Touch
- IOS设计模式--单例设计模式
- iOS获取设备唯一标识的各种方法?IDFA、IDFV、UDID分别是什么含义?