Что такое CADisplayLink в iOS?

«Что такое CADisplayLink в iOS?» — вопрос из категории UIKit, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

CADisplayLink — это таймер, синхронизированный с частотой обновления экрана (VSync). Он вызывает целевой метод каждый раз, когда экран готов к отрисовке нового кадра (обычно 60 или 120 Гц).

Основное применение: создание плавных анимаций, синхронизация игрового цикла или любых операций, которые должны выполняться в ритме с отрисовкой.

Пример использования в Swift:

class AnimationController {
    private var displayLink: CADisplayLink?

    func startAnimation() {
        displayLink = CADisplayLink(target: self, selector: #selector(updateFrame))
        displayLink?.add(to: .current, forMode: .common)
    }

    @objc private func updateFrame() {
        // Обновление состояния анимации на каждом кадре
    }

    func stopAnimation() {
        displayLink?.invalidate()
        displayLink = nil
    }
}

Ключевые свойства и особенности:

  • preferredFramesPerSecond — позволяет ограничить частоту вызовов (например, для экономии энергии).
  • isPaused — временная приостановка таймера.
  • timestamp и duration — предоставляют точное время кадра для расчетов.
  • Работает в связке с RunLoop.
  • Более требователен к энергии, чем Timer, так как привязан к частоте обновления дисплея.