El uso del temporizador (Timer) en Swift
Notas sobre el uso de Timer y NSTimer:
1. Dado que iOS usa runLoop como mecanismo de bucle de mensajes, el hilo principal inicia runLoop de forma predeterminada, pero el hilo secundario no tiene un runLoop predeterminado, por lo que en El subproceso secundario puede iniciar runLoop.
2. Problema del modo RunLoop
Si el temporizador se agrega al RunLoopMode predeterminado, UITrackingRunLoopMode no se programará durante el deslizamiento, lo que provocará que el temporizador falle.
Debido a que tanto UITrackingRunLoopMode como KCFRunLoopDefaultMode marcan el modo común, puede agregar un temporizador a runLoopCommonModes para lograr un funcionamiento normal tanto en el modo predeterminado como en el modo de seguimiento.
3. Cuando finalice el reparto y el tiempo, ejecute invalidar y vacíe el temporizador. Evite pérdidas de memoria