1.没有什么含量 就是通过CADisplayLink 加入RunLoop模式
跟定时器一样,要放入CommonMode
displayLink= [CADisplayLink displayLinkWithTarget:self selector:@selector(displayLinkTick:)];
[displayLink setPaused:YES];
[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
CADisplayLink timestamp 60秒 是固定的。如果执行target 一个周期 delatTimestamp=1的时候 count++没有等于60 所以掉帧了。 CPU忙于执行其他事情,绕过几次回调计算。
```
- (void)displayLinkTick:(CADisplayLink*)link {
if(lastTime==0) {
lastTime= link.timestamp;
return;
}
count++;
NSTimeIntervalinterval = link.timestamp-lastTime;
if(interval <1)return;
lastTime= link.timestamp;
float fps =count/ interval;
count=0;
NSString*text = [NSStringstringWithFormat:@"%d FPS",(int)round(fps)];
[fpsLabel setText: text];
if(_fpsHandler) {
_fpsHandler((int)round(fps));
}
}
```