2009-05-06 6 views

Répondre

152

Oui, il y a +[NSThread sleepForTimeInterval:]

(Juste pour que vous savez pour les questions futures, Objective-C est la langue elle-même,. La bibliothèque d'objets (un d'entre eux au moins) est Cocoa)

+6

Thnx !
pour référence future, la définition est réellement + [NSThread sleepForTimeInterval:] (donc, utilisé comme [NSThread sleepForTimeInterval: 0.1]). – TinkerTank

+0

C'est parfait. Merci! Je viens de finir mes blocs d'animation et ça a marché comme un charme. – RileyE

+0

que diriez-vous de dormir sur le therad principal? – Dagon

7

Bien sûr , vous pouvez également utiliser les appels Unix sleep() et usleep() standard, aussi. (Si vous écrivez Cocoa, je resterais avec [NSThread sleepForTimeInterval:], cependant.)

41

Pourquoi dormez-vous? Lorsque vous dormez, vous bloquez l'interface utilisateur et tout chargement d'URL d'arrière-plan qui ne se trouve pas dans les autres threads (l'utilisation des méthodes asynchrones NSURL fonctionne toujours sur le thread en cours).

Les chances sont ce que vous voulez vraiment, c'est performSelector: withObject: AfterDelay. C'est une méthode sur NSObject que vous pouvez utiliser pour appeler une méthode à un intervalle prédéterminé plus tard - il planifie un appel qui sera effectué plus tard, mais tous les autres trucs que le thread traite (comme l'interface utilisateur et les charges de données) continuer encore.

+38

Dormir est utile pour moi à des fins de test. Je peux simuler certains retards de réseau pour m'assurer que mon application répond correctement. Actuellement, je suis en train de tester sur un serveur web local, donc tout est essentiellement instantané. – brantonb

+6

La mise en veille n'est pas la bonne façon de tester les délais réseau. Regardez la réponse à cette question http://stackoverflow.com/questions/1502060/iphone-intermittent-network-testing pour voir comment tester les vitesses variables des réseaux dans le simulateur. Parce que dormir le thread principal bloque tout, vous ne simulez pas du tout un retard réseau, mais plutôt une suspension de l'application. –

+0

Dormir est utile pour simuler ce qui est fait lors d'une opération de jointure sur un thread JAVA. Vous dormez pendant 10 millis, vérifiez si le fil est mort alors vous pouvez le libérer. –

0

usleep() peut également être utilisé comme ive utilisé cela pour mettre en pause le fil en cours parfois

5

Si vous utilisez NSThread sleepForTimeInterval (code commenté) pour dormir, aller chercher les données seront bloquées, mais + [NSThread sleepForTimeInterval: ] (méthode checkLoad) ne bloque pas l'extraction de données.

Mon exemple de code comme ci-dessous:

- (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 pour un seconde en Java:

Thread.sleep(1000); 

Dormir pour un seconde en Objective C:

[NSThread sleepForTimeInterval:1.0f];