2010-08-26 4 views
0

J'ai des threads qui font beaucoup de travail alors que mon thread principal gère les choses de l'interface utilisateur. Les threads rappellent parfois le thread principal pour mettre à jour une barre de progression.NSRunLoop reçoit un sélecteur étrange; état de la course possible

Dans l'ensemble, ce n'est pas si stable. J'ai résolu des problèmes liés à la logique, mais un en particulier persiste. J'ai un code qui agit comme un bouton d'arrêt, ce qui signifie que le thread n'essaiera pas de se renouveler la prochaine fois qu'il viendra vérifier ce qui se passe.

Parfois, quand j'appuie sur le bouton d'arrêt, je reçois cette erreur:

-[NSRunLoop isEnabled]: unrecognized selector sent to instance...

Il semble se passer si je frappe le bouton d'arrêt vers la fin de la phase de travail du fil. Pendant ce temps, il n'a pas fait grand-chose, sauf:

  • Libérez de la mémoire OpenGL
  • Appel d'une méthode finale sur le thread principal
  • drainez son pool autorelease
  • Et le retour

Mais franchement, le message d'erreur est trop cryptique pour moi même de savoir par où commencer. Quelqu'un peut-il nous éclairer sur NSRunLoop, sur ce que pourrait être cette méthode 'isEnabled' ou sur ce qui pourrait mal se passer?

Répondre

1

Essayez d'exécuter avec Zombies activé. Je ne serais pas surpris si l'un des objets runloop d'un thread est détruit et écrasé par un autre objet, mais vous avez toujours un pointeur périmé là où il était auparavant.

+0

Ah, j'ai entendu parler de cette chose mais je ne l'ai jamais utilisée. Je pense que cela pourrait résoudre beaucoup de mes problèmes de thread. Désolé. > _> – mtrc

+0

Vous êtes une petite star. J'ai ceci - "*** - [UITapGestureRecognizer retient]: message envoyé à l'instance désaffectée" Donc je vais courir après ça. Excellent outil. – mtrc

Questions connexes