2010-09-15 8 views
1

en utilisant iphone sdk 4. J'ai un NSTimer qui appelle une méthode toutes les 3 secondes, mais l'appel de la méthode provoque l'absence de réponse de l'interface utilisateur. Je pensais que le rappel NSTImer se produirait dans un thread séparé au thread principal, mais il semble que ce n'est pas le cas.Remplacement de NSTimer

Comment puis-je remplacer par un NSOperation ou quelque chose de si la méthode est encore appelé toutes les 3 secondes, mais dans un thread d'arrière-plan

Répondre

-2

Votre scénario actuel: méthode « X » sera appelé par votre temps pour chaque 3 secondes. ABC est la tâche que vous effectuez en méthode "X". Ce que vous devez changer: Créer une nouvelle méthode "Y". Implémenter la tâche ABC dans la méthode "Y". Dans la méthode "X" (commentez tout votre code dans X) et utilisez [self performSelector:@selector(Y) withObject:nil]

Notez que le sélecteur ci-dessus fonctionne si la méthode "Y" ne prend aucun argument.

+1

Cela ne changera rien car Y sera toujours exécuté dans le thread principal. Si vous le faites de cette façon, vous devez utiliser 'execSelectorInBackground: withObject'. –

+0

Vous avez tort, lorsque vous appelez performSelector, il sera créé dans un nouveau thread. – Satyam

+0

Non ce ne sera pas. Seulement si vous utilisez 'execSelector: onThread: withObject: waitUntilDone:' vous pouvez spécifier le thread dans lequel le sélecteur doit être effectué, mais ce thread doit déjà exister. – Toastor