Ajouter un délai entre l'exécution de deux lignes suivantes
J'ai besoin d'ajouter un délai entre l'exécution de deux lignes dans un(même) de la fonction. Il est tout favorable options pour le faire?
Remarque: je n'ai pas besoin de deux fonctions différentes pour ce faire, et le retard ne doit pas affecter les autres fonctions de l'exécution.
par exemple:
line 1: [executing first operation];
line 2: Delay /* I need to introduce delay here */
line 3: [executing second operation];
Toute aide est appréciable. Merci à l'avance...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le pgcd de le faire sans avoir à créer une autre méthode
Vous devriez toujours demander "ai-je vraiment besoin d'ajouter un retard" comme on peut souvent compliquer le code et provoquer des conditions de course
Vous pouvez utiliser le
NSThread
méthode:Cependant, si vous faites cela sur le thread principal, vous aurez bloc de l'application, afin de le faire uniquement sur un thread d'arrière-plan.
ou Swift
dans Swift 3
Cette ligne appelle le sélecteur de secondMethod après 3 secondes:
L'utiliser sur votre deuxième opération avec votre choix de retard. Si vous avez beaucoup de code, le placer dans son propre méthode et appelez la méthode avec
performSelector:
. Il l'habitude de bloquer l'INTERFACE utilisateur commesleep
Edit: Si vous ne voulez pas une seconde méthode, vous pouvez ajouter une catégorie pour être en mesure d'utiliser les blocs avec performSelector:
Ou peut-être même plus propre:
performSelector
: stackoverflow.com/questions/4007023/...[self performBlock:^{ your_code } afterDelay:0.1];
J'ai un couple de jeux au tour par tour où j'ai besoin de l'IA à la pause avant de prendre son tour (et entre les étapes de son tour). Je suis sûr qu'il ya d'autres, plus utiles, les situations où un retard est la meilleure solution. Dans Swift:
Je viens ici pour voir si l'Objective-C des appels ont été différents.(J'ai besoin de l'ajouter à celui-ci, aussi).
Si vous ciblez iOS 4.0+, vous pouvez effectuer les opérations suivantes:
Comme @Sunkas écrit,
performSelector:withObject:afterDelay:
est le pendant de ladispatch_after
juste que c'est plus court et vous avez la normaleobjective-c
de la syntaxe. Si vous avez besoin pour passer des arguments pour le bloc que vous voulez de retard, vous pouvez simplement passer le paramètrewithObject
et vous la recevrez dans lesselector
vous appelez le:Si vous souhaitez choisir vous-même si vous exécuter sur le thread principal ou sur le thread en cours, il existe des méthodes spécifiques qui vous permettent de spécifier ce. Les pommes de la Documentation indique ceci: