est-ce que quelqu'un sait s'il est possible d'annuler les événements de sélecteur déjà mis en file d'attente à partir de la pile d'événements ou de la pile de minuterie (ou de tout mécanisme utilisé par l'API) lorsque vous appelez performSelector:withObject:afterDelay
?
J'utilisais cette pile d'événements pour modifier les attributs d'une image dans un onglet TabBar, et je mettais parfois en file d'attente jusqu'à 10 secondes de modifications dans une boucle exécutée rapidement pour ... peut-être 5 millisecondes environ.
le problème survient si l'utilisateur change d'onglet ... comme disons que les modifications d'image sont mises en file d'attente pour une image qui s'affiche dès que l'onglet n ° 4 est activé, puis l'utilisateur passe rapidement à l'onglet n ° 3, puis revient directement à l'onglet # 4 ... cela remettrait ensuite en file d'attente 10 secondes supplémentaires de modifications pendant que l'ancienne file d'attente était encore en cours de lecture, probablement environ 2 ou 3 secondes dans la file d'attente si elle était commutée assez rapidement ... mais même en arrivant à 5 secondes pour le flux était un problème.
j'avais donc besoin d'un moyen d'annuler l'ancienne pile de modifications avant de mettre une nouvelle pile sur ...
J'écris cette requête au passé car j'ai déjà proposé une solution alternative à ce problème en ajoutant un filtre d'événement aux yeux de faucon sur la fonction de lecture. Cependant, je suis toujours curieux de savoir si l'annulation d'un événement est possible, car j'ai le sentiment qu'une telle connaissance sera utile à l'avenir. merci pour toute assistance rendue :)
la source
Réponses:
ou
Le
target
est l'objet d'origine sur lequel aperformSelector:afterDelay:
été appelé.Par exemple:
Voir la documentation Apple , c'est juste à la fin de la
performSelector:withObject:afterDelay:
description.la source
Afin d'annuler toutes les demandes d'exécution précédentes, vous pouvez utiliser:
la source
Si vous recherchez "performSelector" pour avoir son "
cancelPreviousPerformSelector
" correspondant ... ce n'est pas le cas. (Ugh, Apple, pourquoi tu me fais ça ???)Les méthodes, euh, ah, "correspondant" sont:
(Juste pour rendre les choses encore plus difficiles à retenir, sans chercher dans la documentation.)
la source
Consultez la documentation NSRunLoop. Tu veux
-cancelPerformSelectorsWithTarget:
la source