iphone - samsung - ¿Objetivo C equivalente a javascripts setTimeout?
gear iconx 2018 vs airpods (4)
Echa un vistazo a la clase NSTimer
:
NSTimer *timer;
...
timer = [[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(thisMethodGetsFiredOnceEveryThirtySeconds:) userInfo:nil repeats:YES] retain];
[timer fire];
En otro lugar tienes el método real que maneja el evento:
- (void) thisMethodGetsFiredOnceEveryThirtySeconds:(id)sender {
NSLog(@"fired!");
}
Me preguntaba si hay una solución para generar un evento una vez después de 30 segundos o cada 30 segundos en CocoaTouch ObjectiveC.
Hay muchas opciones.
El más rápido de usar está en NSObject
:
- (void)performSelector:(SEL)aSelector withObject:(id)anArgument afterDelay:(NSTimeInterval)delay
(Hay algunos otros con ligeras variaciones.)
Si desea más control o para poder decir que enviar este mensaje cada treinta segundos probablemente necesite NSTimer
.
La familia performSelector: tiene sus limitaciones. Aquí está el equivalente más cercano a setTimeout:
dispatch_time_t delay = dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 0.5);
dispatch_after(delay, dispatch_get_main_queue(), ^(void){
// do work in the UI thread here
});
EDITAR: Un par de proyectos que proporcionan azúcar sintáctica y la capacidad de cancelar la ejecución (clearTimeout):
+[NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats:]
También es posible que desee ver los otros métodos de NSTimer