iphone - ¿Cuál es el equivalente de Thread.sleep() de Java en Objective-C/Cocoa?
sleep swift (6)
En Java, puede suspender la ejecución del hilo actual durante un período de tiempo utilizando Thread.sleep (). ¿Hay algo como esto en Objective C?
¿Por qué estás durmiendo? Cuando duerme, está bloqueando la IU y también cualquier carga de URL de fondo que no esté en otros hilos (usando los métodos asíncronos NSURL todavía opera en el hilo actual).
Lo que realmente desea es performSelector: withObject: AfterDelay. Ese es un método en NSObject que puede usar para llamar a un método en algún intervalo predeterminado más tarde: programa una llamada que se realizará más adelante, pero todas las demás cosas que maneja el hilo (como la IU y las cargas de datos) aún continuar
Dormir por un segundo en Java:
Thread.sleep(1000);
Dormir por un segundo en Objective C:
[NSThread sleepForTimeInterval:1.0f];
Por supuesto, también puede usar las llamadas estándar Unix sleep () y usleep (). (Si escribo Cocoa, me quedaría con el [NSThread sleepForTimeInterval:], sin embargo).
Sí, hay + [NSThread sleepForTimeInterval:]
(Para que lo sepas para futuras preguntas, Objective-C es el lenguaje en sí mismo, la biblioteca de objetos (uno de ellos como mínimo) es Cocoa).
Si usa NSThread sleepForTimeInterval (código comentado) para dormir, se capturará la obtención de datos, pero + [NSThread sleepForTimeInterval:] (método checkLoad) no bloqueará la obtención de datos.
Mi código de ejemplo como a continuación:
- (void)viewDidAppear:(BOOL)animated
{
//....
//show loader view
[HUD showUIBlockingIndicatorWithText:@"Fetching JSON data"];
// while (_loans == nil || _loans.count == 0)
// {
// [NSThread sleepForTimeInterval:1.0f];
// [self reloadLoansFormApi];
// NSLog(@"sleep ");
// }
[self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f];
}
-(void) checkLoad
{
[self reloadLoansFormApi];
if (_loans == nil || _loans.count == 0)
{
[self performSelector:@selector(checkLoad) withObject:self afterDelay:1.0f];
} else
{
NSLog(@"size %d", _loans.count);
[self.tableView reloadData];
//hide the loader view
[HUD hideUIBlockingIndicator];
}
}
usleep () también se puede usar como lo he usado para pausar el hilo actual a veces