Respuestas:
Sí, hay + [NSThread sleepForTimeInterval:]
(Solo para que sepas para futuras preguntas, Objective-C es el lenguaje en sí; la biblioteca de objetos (uno de ellos al menos) es Cocoa).
Dormir un segundo en Java:
Thread.sleep(1000);
Dormir un segundo en el objetivo C:
[NSThread sleepForTimeInterval:1.0f];
¿Por qué estás durmiendo? Cuando duerme, está bloqueando la interfaz de usuario y también cualquier URL de fondo que no se cargue en otros subprocesos (el uso de los métodos asíncronos de NSURL aún funciona en el subproceso actual).
Lo más probable es que lo que realmente desee sea performSelector: withObject: AfterDelay. Ese es un método en NSObject que puede usar para llamar a un método en un intervalo predeterminado más tarde: programa una llamada que se realizará en un momento posterior, pero todas las otras cosas que maneja el hilo (como la interfaz de usuario y las cargas de datos) todavía continúa.
Por supuesto, también puede usar las llamadas estándar sleep () y usleep () de Unix. (Sin embargo, si escribo Cocoa, me quedaría con [NSThread sleepForTimeInterval:]).
Si usa NSThread sleepForTimeInterval (código comentado) para dormir, la recuperación de datos se bloqueará, pero + [NSThread sleepForTimeInterval:] (método checkLoad) no bloqueará la recuperación de datos.
Mi código de ejemplo de la siguiente manera:
- (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];
}
}