87 votes

Blocs au lieu de performSelector:withObject:afterDelay :

Souvent, je veux exécuter un code quelques microsecondes à l’avenir. Droit maintenant, je le résoudre comme ceci :

Et ceci :

Il fonctionne, mais je dois créer une nouvelle méthode à chaque fois. Est-il possible d’utiliser des blocs au lieu de cela ? Fondamentalement, je cherche une méthode telle que :

Ce serait vraiment utile pour moi.

106voto

John Calsbeek Points 19381

Il n’y a aucun moyen intégré pour le faire, mais ce n’est pas trop mauvais d’ajouter via une catégorie :

Un crédit pour Mike cendre pour l’implémentation de base.

41voto

Nick Moore Points 7897

Voici une technique simple, basée sur le GCD, que j’utilise :

Je ne suis pas un expert de pgcd, et je serais intéressé de commentaires sur cette solution.

22voto

Ninja Points 981

Une autre façon (peut-être la pire façon de faire cela pour de nombreuses raisons) est :

16voto

Greg Combs Points 2296

Si vous avez spécifiquement besoin d’un délai plus long, les solutions ci-dessus fonctionnent très bien. J’ai utilisé l’approche de @nick avec beaucoup de succès.

Toutefois, si vous voulez juste votre bloc à exécuter au cours de la prochaine itération de la boucle principale, vous pouvez découper vers le bas encore plus loin avec tout ce qui suit :

Cela s’apparente à l’utilisation de performSelector : avec afterDelay de 0.0f

11voto

Despotovic Points 96

J’ai utilisé un code similaire à ceci :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X