问题: CADisplayLink和NSTime使用过程注意事项?


需要主要对Target的引用问题,可能会进一步的造成循环引用问题.

  • CADisplayLink 和 NSTime主要依赖于RunLoop, 两者并不准时.

  • iOS设备的屏幕刷新频率是固定的,CADisplayLink在正常情况下会在每次刷新结束都被调用,精确度相当高。

  • NSTimer的精确度就显得低了点,比如NSTimer的触发时间到的时候,runloop如果在阻塞状态,触发时间就会推迟到下一个runloop周期。并且 NSTimer新增了tolerance属性,让用户可以设置可以容忍的触发的时间的延迟范围。

  • CADisplayLink使用场合相对专一,适合做UI的不停重绘,比如自定义动画引擎或者视频播放的渲染。NSTimer的使用范围要广泛的多,各种需要单次或者循环定时处理的任务都可以使用。在UI相关的动画或者显示内容使用 CADisplayLink比起用NSTimer的好处就是我们不需要在格外关心屏幕的刷新频率了,因为它本身就是跟屏幕刷新同步的。


问题: dispatch_source_t 与 CADisplayLink和NSTimer 区别?


  • dispatch_source_t与系统内核挂钩,属于硬件定时器.

  • CADisplayLink和NSTimer属于软件定时器, 和RunLoop挂钩. 存在一定的误差.


IT界无底坑洞栋主 欢迎加Q骚扰:676758285