2009-07-13 4 views
1

J'ai une application iphone, elle exécute du thread pour calculer la recherche. La recherche est effectuée en appelant une fonction qui prend du temps à partir d'une bibliothèque.Sortie NSThread lorsque l'application se termine

Je dois quitter le thread lorsque l'application se termine, sinon le thread continue de s'exécuter et la recherche crée un problème lorsque je rouvre l'application.

J'ai essayé de souscrire dans le fil

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(mainApplicationWillTerminate) name:@"UIApplicationWillTerminateNotification" object:nil]; 

Et mainApplicationWillTerminate

-(void)mainApplicationWillTerminate; 
{ 
    [NSThread exit]; 
} 

Le problème est toujours présent, une idée?

Répondre

1

Comme indiqué dans les documents, vous devez éviter d'utiliser [NSThread exit]. En général, pour éviter les fuites de mémoire et autres catastrophes, un thread ne doit jamais être arrêté "de l'extérieur". Un thread doit toujours quitter .

Dans votre fil boucle principale vous devriez vérifier si le fil a été annulé:

if ([[NSthread currentThread] isCancelled]) { 
    return; 
} 

Pour annuler ce que vous appelez la méthode « annuler » d'un autre fil.

Dans votre cas, vous devez configurer un délégué de l'application (voir UIApplicationDelegate)

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [myThread cancel]; 
} 

Mieux allez voir la belle NSOperation classe aussi.

+0

manque un « ] » sur le côté droit de l'instruction if –

+0

fixe, merci – IlDan

+0

Salut, TNX pour la réponse J'ai un temps de blocage consommer fonction, si le thread appeler cette fonction et i sortie de l'application mais le thread fonctionne toujours, si je rouvre l'application, il plantage. Je dois trouver un moyen de tuer le fil avant la sortie de mainThread –

Questions connexes