2009-05-06 12 views

Respuesta

152

Sí, hay +[NSThread sleepForTimeInterval:]

(Para que lo sepas para preguntas futuras, Objective-C es el lenguaje mismo;. La biblioteca de objetos (uno de ellos al menos) es cacao)

+6

Thnx !
para referencia futura, la definición es en realidad + [NSThread sleepForTimeInterval:] (entonces, usado como [NSThread sleepForTimeInterval: 0.1]). – TinkerTank

+0

Esto es perfecto. ¡Gracias! Acabo de terminar mis bloques de animación y funcionó a las mil maravillas. – RileyE

+0

¿Qué hay de dormir en Therad principal? – Dagon

7

Por supuesto , también podría usar las llamadas estándar Unix sleep() y usleep(). (Si escribo Cocoa, me quedaría con el [NSThread sleepForTimeInterval:], sin embargo.)

41

¿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

+38

Dormir es útil para fines de prueba. Puedo simular algunas demoras en la red para asegurarme de que mi aplicación responda correctamente. Actualmente estoy probando contra un servidor web local, así que todo es esencialmente instantáneo. – brantonb

+6

Dormir es la forma incorrecta de probar los retrasos en la red. Mire la respuesta para esta pregunta http://stackoverflow.com/questions/1502060/iphone-intermittent-network-testing para ver cómo probar velocidades variables de redes en el simulador. Debido a que dormir el hilo principal bloquea todo, no estás simulando un retraso de red, sino más bien una suspensión de la aplicación. –

+0

Dormir es útil para simular lo que se hace en una operación de combinación en un hilo JAVA. Usted duerme por 10 millis, verifica si el hilo está muerto, entonces puede destrabarlo. –

0

usleep() también se puede utilizar como he utilizado para interrumpir temporalmente el flujo actual a veces

5

Si utiliza NSThread sleepForTimeInterval (código comentado) para dormir, ir a buscar los datos serán bloqueados, pero + [NSThread sleepForTimeInterval: ] (método checkLoad) no bloqueará la obtenció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]; 
    } 
} 
77

dormir para un solo segundos en Java:

Thread.sleep(1000); 

dormir para un solo segundos en C Objetivo:

[NSThread sleepForTimeInterval:1.0f]; 
Cuestiones relacionadas