web-dev-qa-db-fra.com

Quel est l'équivalent de Thread.sleep () de Java en Objective-C / Cocoa?

Dans Java, vous pouvez suspendre l'exécution du thread actuel pendant un certain temps à l'aide de Thread.sleep (). Existe-t-il quelque chose comme ceci dans Objective C?

108
levi

Oui, il y a + [NSThread sleepForTimeInterval:]

(Pour votre future question, Objective-C est le langage lui-même; la bibliothèque d'objets (au moins l'un d'entre eux) est Cocoa.)

156
smorgan

Dormir pendant ne seconde en Java:

Thread.sleep(1000);

Dormir pendant ne seconde dans l’objectif C:

[NSThread sleepForTimeInterval:1.0f];
87
Rok Strniša

Pourquoi dormez-vous? Lorsque vous dormez, vous bloquez l'interface utilisateur ainsi que tout chargement d'URL d'arrière-plan qui ne figure pas dans d'autres threads (à l'aide des méthodes asynchrones NSURL, celle-ci fonctionne toujours sur le thread actuel).

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é ultérieurement. Elle planifie un appel qui sera exécuté ultérieurement, mais tous les autres objets que le thread traite (comme les charges d’interface utilisateur et de données) continue toujours.

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

7
Bill Heyman

Si vous utilisez NSThread sleepForTimeInterval (code commenté) pour dormir, l'extraction de données sera bloquée, mais + [NSThread sleepForTimeInterval:] (méthode checkLoad) ne bloquera 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];
    }
}
5
wu liang

usleep () peut aussi être utilisé comme ive utilisé pour mettre en pause le thread actuel

0
j2emanue