Envoyer un message à la fin de la run loop courante.
Hello
Je voudrais savoir comment vous feriez pour reproduire le système de setNeedsDisplay/drawRect, setNeedsLayout/layoutSubviews ou même encore autorelease/release (quoiqu'un poil différent) ?
En gros, éviter d'appeler plusieurs fois une méthode "lourde" (ou pas d'ailleurs) au cours d'une run loop, mais plutôt attendre la fin de celle-ci afin d'exécuter une seule fois la dite méthode.
Difficulté supplémentaire : si possible j'aimerais ne pas avoir à implémenter DEUX méthodes. En gros je voudrais pouvoir envoyer plusieurs fois mon message -doSomething, mais que en interne, la méthode soit assez intelligente pour différer l'envoie du message (et de ne l'envoyer qu'une seule fois par cycle).
Alors j'ai déjà réussi à faire quelque chose mais c'est vraiment bricolage et j'en suis pas super fier (et je suis pas certain que ce soit hyper hyper fiable) mais je ne donne rien ici, afin de voir plutôt votre approche.
Merci d'avance
Réponses
J'avoue ne pas vraiment m'être penché sur ce point. J'ai regardé un peu la documentation de NSRunLoop et il y a une méthode qui m'intrigue :
This method sets up a timer to perform the aSelector message on the current thread's run loop at the start of the next run loop iteration.
Je sais pas si ça peut t'aider mais je pense que tu as déjà regardé
Après pour ne pas l'exécuter au nombre de fois que tu appelles le perform ...
Il y a cette méthode de NSRunloop qui peut d'intéresser:
Comment j'ai grillé de justesse mpergand :P
Oui c'est bien cette méthode qu'il faut utiliser.
Ta méthode doSomething va se contenter de mettre à YES un flag en interne (genre une variable d'instance privée _shouldDoSomethingOnNextRunLoop) et appeler "performSelector:target:argument:order:modes:" avec un @selector(maybeDoSomethingOncePerRunloop). Il suffira ensuite de coder maybeDoSomethingOncePerRunloop :