Maison  >  Article  >  Plusieurs méthodes d'exécution différée sur iOS

Plusieurs méthodes d'exécution différée sur iOS

(*-*)浩
(*-*)浩original
2019-12-24 09:43:223009parcourir

Plusieurs méthodes d'exécution différée sur iOS

L'appel différé des méthodes est souvent utilisé dans le développement de projets. Les scénarios d'appel spécifiques ne seront pas décrits en détail. Plusieurs implémentations existantes sont répertoriées ci-dessous. Méthode :

Méthode 1 : performSelector                                                                                                                                                                                                Le mode d'exécution non bloquant n'affectera pas les autres processus ; doit être exécuté dans le thread principal ;

peut annuler activement l'opération :

[self performSelector:@selector(delayMethods) withObject:nil afterDelay:1.0];

Si vous souhaitez annuler toutes les opérations de retard en cours :

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethods) object:nil];

Remarque : Cette méthode n'est pas suffisamment sûre. Cette méthode définira la minuterie dans la boucle d'exécution actuelle lorsqu'elle sera appelée. Mais nous savons que seul le thread principal exécutera automatiquement une boucle d'exécution et contiendra un minuteur par défaut lors de sa création. Les threads enfants ordinaires n'ont pas de boucles d'exécution ni de minuteurs. Ainsi, lorsqu'il est appelé dans un thread enfant, le code d'opération de retard dans notre code attendra toujours que le minuteur soit programmé, mais en fait il n'y a pas de minuteur dans le thread enfant, ce qui entraînera notre retard. L'action le code n'est jamais exécuté.

Méthode 2 : NSTimer

[NSObject cancelPreviousPerformRequestsWithTarget:self];

Analyse : Cette méthode est une méthode d'exécution non bloquante qui n'affectera pas les autres processus, elle doit l'être ; exécuté dans le thread principal Exécuté dans un thread ; la valeur par défaut est de définir une minuterie dans le thread principal ; vous pouvez définir si l'opération de retard doit être répétée

Annuler l'opération de retard :

NSTimer *timer =  [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(delayMethods) userInfo:nil repeats:NO];

Remarque : Si le paramètre de répétitions est défini sur NON, le minuteur sera automatiquement détruit une fois l'exécution terminée. Si le paramètre de répétitions est défini sur OUI, une fois l'exécution terminée, [. timer invalidate] doit être appelé manuellement pour détruire le timer ;

Méthode 3 : sleep

[timer invalidate];

Analyse : Cette méthode est une méthode d'exécution bloquante .Il est préférable de l'exécuter dans un thread enfant, sinon cela affectera l'exécution des autres méthodes.

Méthode 4 : GCD

[NSThread sleepForTimeInterval:1.0];

Analyse : Cette méthode est une méthode d'exécution non bloquante qui n'affectera pas les autres processus ; utilisé dans les paramètres Définir le processus d'exécution dans :

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[self delayMethods];
});

Vous pouvez également définir s'il faut exécuter à plusieurs reprises :

dispatch_queue_t queen = dispatch_get_global_queue(0, 0);
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), queen, ^{
[self delayMethods];
});

Remarque : car cette méthode est automatiquement traité par GCD , il n'est donc pas facile d'annuler l'opération

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn