CoreAnimation --> CADisplayLink
2015-09-28 10:11
253 查看
CADisplayLink和其它CoreAnimation类一样,都是在QuartzCore.framework里。
CADisplayLink最主要的特征是能提供一个周期性的调用我们赋给它的selector的机制,从这点上看它很像定时器NSTimer。
当把CADisplayLink对象add到runloop中后,selector就能被周期性调用,类似于NSTimer被启动了;执行invalidate操作时,CADisplayLink对象就会从runloop中移除,selector调用也随即停止,类似于NSTimer的invalidate方法。
NSTimer以指定的模式注册到runloop后,每当设定的周期时间到达后,runloop会向指定的target发送一次指定的selector消息。
NSTimer的selector调用周期可以在初始化时直接设定,相对就灵活的多。
NSTimer的精确度就显得低了点,比如NSTimer的触发时间到的时候,runloop如果在忙于别的调用,触发时间就会推迟到下一个runloop周期。更有甚者,在OS X v10.9以后为了尽量避免在NSTimer触发时间到了而去中断当前处理的任务,NSTimer新增了tolerance属性,让用户可以设置可以容忍的触发的时间范围。
NSTimer的使用范围要广泛的多,各种需要单次或者循环定时处理的任务都可以使用。
原文地址:http://blog.csdn.net/wzzvictory/article/details/22417181
CADisplayLink最主要的特征是能提供一个周期性的调用我们赋给它的selector的机制,从这点上看它很像定时器NSTimer。
当把CADisplayLink对象add到runloop中后,selector就能被周期性调用,类似于NSTimer被启动了;执行invalidate操作时,CADisplayLink对象就会从runloop中移除,selector调用也随即停止,类似于NSTimer的invalidate方法。
CADisplayLink与NSTimer不同的地方有:
1、原理不同
CADisplayLink是一个能让我们以和屏幕刷新率同步的频率将特定的内容画到屏幕上的定时器类。CADisplayLink以特定模式注册到runloop后,每当屏幕显示内容刷新结束的时候,runloop就会向CADisplayLink指定的target发送一次指定的selector消息, CADisplayLink类对应的selector就会被调用一次。NSTimer以指定的模式注册到runloop后,每当设定的周期时间到达后,runloop会向指定的target发送一次指定的selector消息。
2、周期设置方式不同
iOS设备的屏幕刷新频率(FPS)是60Hz,因此CADisplayLink的selector默认调用周期是每秒60次,这个周期可以通过frameInterval属性设置,CADisplayLink的selector每秒调用次数=60/frameInterval。比如当frameInterval设为2,每秒调用就变成30次。因此,CADisplayLink周期的设置方式略显不便。NSTimer的selector调用周期可以在初始化时直接设定,相对就灵活的多。
3、精确度不同
iOS设备的屏幕刷新频率是固定的,CADisplayLink在正常情况下会在每次刷新结束都被调用,精确度相当高。NSTimer的精确度就显得低了点,比如NSTimer的触发时间到的时候,runloop如果在忙于别的调用,触发时间就会推迟到下一个runloop周期。更有甚者,在OS X v10.9以后为了尽量避免在NSTimer触发时间到了而去中断当前处理的任务,NSTimer新增了tolerance属性,让用户可以设置可以容忍的触发的时间范围。
4、使用场合
从原理上不难看出,CADisplayLink使用场合相对专一,适合做界面的不停重绘,比如视频播放的时候需要不停地获取下一帧用于界面渲染。NSTimer的使用范围要广泛的多,各种需要单次或者循环定时处理的任务都可以使用。
原文地址:http://blog.csdn.net/wzzvictory/article/details/22417181
相关文章推荐
- poj2074 线段相交的视线问题
- 如何防止短信炸弹
- iOS开发之字典转模型
- LINUX下查看CPU使用率的 top 命令
- Android 事件传递机制应用——下拉刷新(未完成)
- TUTK 手机客户端注意事项
- JS+CSS实现六级网站导航主菜单效果
- 最长子字符串
- Android Service完全解析,关于服务你所需知道的一切(上)
- ioctl()函数详解
- phalapi-入门篇2(把它玩起来)
- 三维点云目标提取总结
- Uncle Tom's Inherited Land
- 黑马程序员——C语言日志——typedef的使用以及和#define的区别
- STM32 CAN 配置、收发结构定义 留存...
- AndroidStudio第一次构建出现Buiding 'Project Name' Gradle project info长时间等待
- 接口回掉
- iOS 9 变化笔记
- A左右ndroid正在使用Uri监视数据库中的更改
- Search Quick Union Find(图的存储结构)