Qu'est ce qu'un runloop?
Après la lecture de la documentation pour NSRunLoop je ne comprends pas très bien. Je suis frayé un thread secondaire qui a un NSTimer dans ce que le lancement de tous les 1sec. La mise à jour d'une étiquette sur l'écran avec le performSelectorOnMainThread..
Cependant à le faire fonctionner, j'ai besoin d'un runloop mais je ne comprends pas le concept de celle-ci?
Quelqu'un qui pourrait essayer de l'expliquer?
Grâce.
Vous devez vous connecter pour publier un commentaire.
Exécuter la boucle est efficace:
Il fonctionne sur un fil, le thread principal est la boucle principale où les événements de l'utilisateur sont traitées et plus de dessin d'INTERFACE utilisateur, etc, se produit. Le la documentation explique en détail.
Cependant, dans votre cas, vous n'avez pas besoin d'un fil.
Cela ressemble à tout ce que vous faites est périodiquement mise à jour de l'étiquette dans l'INTERFACE utilisateur; quelque chose qui n'est pas terriblement de calcul intensif.
Juste planifier votre minuterie dans le thread principal et être fait avec elle. Pas besoin de faire tourner un fil, à l'aide de
performSelectorOnMainThread:
, ou d'engager toute la complexité de garantir la cohérence des données entre threads.Désolé -- n'ai pas compris votre question.
En interne, une course en boucle œuvres essentiellement de mettre un drapeau dans l'exécution de la boucle qui dit "après ce laps de temps écoulé, le feu de la minuterie". Aucun threads supplémentaires et, mieux encore, il n'est pas d'interrogation pour vérifier l'heure. Pensez à une course en boucle comme le maintien d'un calendrier. Il va passivement laisser le temps s'écouler jusqu'à ce qu'il y a quelque chose d'intéressant trouvé sur le scénario (le tout sans interrogation -- interrogation suce. être évité).
Cela signifie, cependant, que d'une Minuterie ne sera jamais fiable à 100%. Ainsi, si vous avez une minuterie de répéter à chaque seconde, il va de dérive dans le temps.
Aussi; au lieu de directement le déclenchement d'un dessin de l'événement. Votre minuterie devrait invalider le point de vue que les besoins de mise à jour, puis de laisser les objets sous-jacents traiter quand il est mieux en fait de mise à jour de l'écran.
Cette page explique assez bien. ALE:
performSelectorOnMainThread:
, il vous suffit d'invoquer la méthode de minuteur avecperformSelector:withObject:afterDelay:
depuis le thread principal. La méthode peut alors récursivement appel de son auto pour répéter la minuterie.