(Swift) Una alternativa: Se puede utilizar un sistema de temporizador basado en GCD como éste:
class GCDTimer {
private var _timer : dispatch_source_t?
init() {
}
private func _createTheTimer(interval : Double, queue : dispatch_queue_t, block : (() -> Void)) -> dispatch_source_t
{
let timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
if (timer != nil)
{
dispatch_source_set_timer(timer, dispatch_time(DISPATCH_TIME_NOW, Int64(interval * Double(NSEC_PER_SEC))), UInt64(interval * Double(NSEC_PER_SEC)), (1 * NSEC_PER_SEC)/10);
dispatch_source_set_event_handler(timer, block);
dispatch_resume(timer);
}
return timer;
}
func start(interval : Double, block : (() -> Void))
{
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
_timer = _createTheTimer(interval, queue: queue, block: block)
}
func stop()
{
if (_timer != nil) {
dispatch_source_cancel(_timer!);
_timer = nil;
}
}
}
Así que con esto en realidad no tienen para disparar el temporizador, se inicia cuando se ejecuta esa línea, ¿correcto? –
De la documentación: "Puede agregar un temporizador a múltiples modos de entrada. Mientras se ejecuta en el modo designado, el receptor activa el temporizador o después de su fecha de disparo programada. Al dispararse, el temporizador invoca su rutina de controlador asociada, que es un selector en un objeto designado ". –