##duration と timestamp
普通に初期化して、
CADisplayLink *displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(onTimer:)];
displayLink.frameInterval = 30;
[displayLink addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
self.displayLink = displayLink;
[self onTimer:self.displayLink];
こうやって link.timestamp
の前回のものとの差分を取った場合、
- (void)onTimer:(CADisplayLink *)link
{
CFTimeInterval now = link.timestamp;
CFTimeInterval interval = now - lastTimestamp;
lastTimestamp = now;
}
この interval
は link.duration
と一致する。
画面のリフレッシュレートが60fpsなので、どちらも 0.16666 近辺の値である。
しかし、次のようにフレームレートを下げた場合(この場合は2fpsになる)、
displayLink.frameInterval = 30;
link.duration
は同様に 0.1666 近辺の値となるが、link.timestamp
の前回との差分は0.5(60fpsで30フレームごとのfireなので2fps)近辺となる。
つまり、
duration
はframeInterval
の影響を受けない・・・60fpsの場合の前回の更新時からの経過時間
ことがわかる。