当CADisplayLink 以特定的模式注册到runloop之后,每当屏幕需要刷新的时候,runloop就会调用CADisplayLink绑定的target上的selector。
对于iOS设备来说刷新频率就是60HZ,也就是说selector的调用是每秒60次。
但是CADisplayLink的调用真的足够精确吗?因为我们知道,fps这个东西可不是一成不变的!
我在selector中写了下面一些代码:
some++;
if (some==60) {
some=0;
NSLog(@"一秒!!");
}
也就意味着,如果每秒调用60次的话,那么输出应该是每秒1次。
可以看到输出中的时间。一开始是很平稳的45:01,45:02,45:03,然后一下子跳到了45:09,然后又是45:12,45:15,可以看到,并不是确定的每秒输出一次,也就是并不是每秒调用60次selector!
那么为什么一开始那么平稳,突然就变了呢。我在一个tableView中,每个cell加了很多复杂的UI,所以GPU去渲染时很耗费性能,导致fps并不能以60的平稳状态保持,selector的调用也就相应的变化了。
结论
CADisplayLink的调用足够精确吗?
答:CADisplayLink每当屏幕刷新一次就会调用一次selector,非常精确。但是,应为屏幕刷新并不是一成不变的每秒60次,所以每秒调用固定次数的说法并不正确!
(虽然一个好的应用,fps应该相对平稳)