Formate o cronômetro em tempo real até o centésimo usando o Swift

Eu tenho um aplicativo usando um NSTimer em intervalos de atualização de centissegundos (0,01 segundo) para exibir um cronômetro em execução no formato String como 00: 00.00 (mm: ss.SS). (Clonando basicamente o cronômetro interno do iOS para integrar-se a problemas matemáticos de cronometragem esportiva em tempo real, possivelmente precisando de milissegundos de precisão no futuro)

Eu uso (uso indevido?) O NSTimer para forçar a atualização do UILabel. Se o usuário pressionar Iniciar, este é o código NSTimer usado para começar a repetir a função:

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

E aqui está a função que é executada pelo NSTimer acima:

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
    }
}

Haverá pelo menos 2 links de exibição em execução ao mesmo tempo. Esse método será muito ineficiente quando todos os outros elementos estiverem em jogo?

A exibição é atualizada sem o uso do NSTimer quando o usuário pressiona parar / pausar / redefinir. Não encontrei nada que fosse traduzido diretamente para o Swift. Estou bastante certo de que estou usando um método ineficiente para forçar a atualização rápida do texto UILabel no UIView.

Mais detalhes: Estou trabalhando em um código menos confuso para o formato do cronômetro em execução (mm: ss.SS). Vou atualizar isso mais uma vez quando terminar.

ATUALIZAÇÃO: Agradecemos a Rob e jtbandes por responderem a minhas duas perguntas (método de formatação e método de atualização de exibição). Foi fácil substituir o NSTimer (veja acima) pelo CADisplayLink ():

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

E depois substitua todas as instâncias no código de

displayOnlyTimer.invalidate() 

com

displayLink.paused = true 

(isso fará uma pausa na atualização do link de exibição)

questionAnswers(2)

yourAnswerToTheQuestion