Formatee el cronómetro en tiempo real a la centésima usando Swift

Tengo una aplicación que usa un NSTimer a intervalos de actualización de centisegundos (0.01 segundos) para mostrar un cronómetro en funcionamiento en formato de cadena como 00: 00.00 (mm: ss.SS). (Básicamente, clonar el cronómetro incorporado de iOS para integrarse en problemas matemáticos de cronometraje deportivo en tiempo real, posiblemente necesitando una precisión de milisegundos en el futuro)

Uso (¿uso indebido?) El NSTimer para forzar la actualización de UILabel. Si el usuario presiona Inicio, este es el código NSTimer utilizado para comenzar a repetir la función:

displayOnlyTimer = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("display"), userInfo: nil, repeats: true)

Y aquí está la función que ejecuta el NSTimer anterior:

func display() {
    let currentTime = CACurrentMediaTime() - timerStarted + elapsedTime

    if currentTime < 60 {
        timeDisplay.text = String(format: "%.2f", currentTime)
    }else if currentTime < 3600 {
        var minutes = String(format: "%00d", Int(currentTime/60))
        var seconds = String(format: "%05.2f", currentTime % 60)
        timeDisplay.text =  minutes + ":" + seconds
    }else {
        var hours = String(format: "%00d", Int(currentTime/3600))
        var minutes = String(format: "%02d", (Int(currentTime/60)-(Int(currentTime/3600)*60)))
        var seconds = String(format: "%05.2f", currentTime % 60)
        timeDisplay.text =  hours + ":" + minutes + ":" + seconds
    }
}

Habrá al menos 2 enlaces de visualización ejecutándose al mismo tiempo. ¿Será este método demasiado ineficiente una vez que todos los demás elementos estén en juego?

La pantalla se actualiza sin usar NSTimer cuando el usuario presiona detener / pausar / restablecer. No encontré nada que se tradujera directamente en Swift. Estoy bastante seguro de que estoy usando un método ineficiente para forzar la actualización rápida del texto UILabel en la UIView.

Más detalles: estoy trabajando en un código menos desordenado para el formato del temporizador en ejecución (mm: ss.SS). Actualizaré esto una vez más cuando termine eso.

ACTUALIZACIÓN: Gracias a Rob y jtbandes por responder mis dos preguntas (método de formato y método de actualización de pantalla). Fue fácil reemplazar el NSTimer (ver arriba) con CADisplayLink ():

displayLink = CADisplayLink(target: self, selector: Selector("display"))
        displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)

Y luego reemplace todas las instancias en el código de

displayOnlyTimer.invalidate() 

con

displayLink.paused = true 

(esto detendrá la actualización del enlace de visualización)

Respuestas a la pregunta(2)

Su respuesta a la pregunta