I have a entry level Mac Mini 2014 and I have tested CVDisplayLink vs using NSTimer (with a desired interval of 0.001), as explained here: https://developer.apple.com/library/mac/qa/qa1385/_index.html
I started using CVDisplayLink but I noticed that if my frame takes more than ~10-13 ms to complete then it will skip a frame.
I use OpenGL (single buffering) and test to call glFinish instead of glFlush so that the thread wait for vsync. I then measure the time it takes from the CVDisplayLink callback to end of glFinish. Lo and behold, the time is about ~10-13 ms.
This makes me think think that the scheduler don't call my CVDisplayLink callback as soon as vertical sync is over, but waits 3-6 ms (on my machine), depending on whatever else my computer wants to do.
Of course I want my 16 ms per frame and next I test using an NSTimer instead, with interval of 0.001 so that it fires as soon as possible. When I measure time from my timer callback to glFinish and I get reliable 15-16ms. W
This leeds me to conclude that NSTimer is the better option of the two.
Just wanted to share.