Maison > Problème commun > Plusieurs méthodes d'exécution différée sur iOS

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

(*-*)浩
Libérer: 2019-12-24 09:43:22
original
3050 Les gens l'ont consulté

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];
Copier après la connexion

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

[NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(delayMethods) object:nil];
Copier après la connexion

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];
Copier après la connexion

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];
Copier après la connexion

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];
Copier après la connexion

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];
Copier après la connexion

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];
});
Copier après la connexion

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];
});
Copier après la connexion

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!

Étiquettes associées:
ios
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal