2009-07-13 22 views
1

Ich habe eine iPhone-App, führen Sie einige Thread zur Berechnung der Suche. Die Suche wird durchgeführt, indem eine zeitaufwendige Funktion aus einer Bibliothek aufgerufen wird.NSThread beenden, wenn app beenden

Ich muss den Thread beenden, wenn die App beendet wird, andernfalls wird der Thread weiter ausgeführt und die Suche verursacht ein Problem, wenn ich die App erneut öffne.

Ich habe versucht, in das Gewinde

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

Und in mainApplicationWillTerminate

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

Das Problem ist nach wie vor vorhanden, eine Idee zu abonnieren?

Antwort

1

Wie in den Dokumenten erwähnt, sollten Sie die Verwendung von [NSThread exit] vermeiden. Im Allgemeinen sollte ein Thread niemals "von außen" gestoppt werden, um Speicherlecks und andere Katastrophen zu vermeiden. Ein Thread sollte immer von selbst verlassen.

In Thread Hauptschleife sollten Sie prüfen, ob der Thread abgebrochen wurde:

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

es abzubrechen Sie seine "cancel" Methode von einem anderen Thread aufrufen.

In Ihrem Fall, dass Sie Setup eine Anwendung delegieren sollen (siehe UIApplicationDelegate)

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

Besser auch einen Blick auf die schöne NSOperation Klasse.

+0

fehlt ein ‚]‘ auf der rechten Seite der if-Anweisung –

+0

fixiert, danke – IlDan

+0

Hallo, tnx für die Antwort ich eine Sperrzeitraubend Funktion haben, wenn der Thread diese Funktion, und ich aus der App Ausfahrt aufrufen aber thread funktioniert immer noch, wenn ich die app wieder öffne es stürzt ab. Ich muss eine Möglichkeit finden, den Thread vor dem Beenden von mainThread –