2010-08-31 1 views
7

Ich möchte eine Methode in einem Hintergrund-Thread ausführen, die erste Methode wird eine andere Methode auf dem gleichen (Hintergrund) Thread nach einigen Sekunden ausführen. Ich schrieb dieses:iphone: performSelector: withObject: afterDelay: funktioniert nicht mit einem Hintergrund-Thread?

- (IBAction)lauch:(id)sender 
{ 
    [self performSelectorInBackground:@selector(first) withObject:nil]; 

} 
-(void) second { 
    printf("second\n"); 
} 
-(void) first { 
    NSAutoreleasePool *apool = [[NSAutoreleasePool alloc] init]; 
    printf("first\n"); 

    [self performSelector:@selector(second) withObject:nil afterDelay:3]; 

    printf("ok\n"); 
    [apool release]; 
} 

aber die zweite Methode wird nie genannt, warum? und wie kann ich mein Ziel erreichen?

dank

Antwort

9

Sie haben einen laufenden Laufschleife für perform haben: withobject: afterDelay: zu arbeiten.


Ihr Code ausführt first und, wenn first Exits wird der Faden weg. Sie müssen eine Laufschleife ausführen.

Anzahl:

[[NSRunLoop currentRunLoop] run]; 

Zum Ende first.

+0

autsch ... nein. Das sollte das Problem sein. Vielen Dank! – subzero

+2

Ich verstehe nicht, wie kann man keine Laufschleife haben? – bogardon

+0

Ich verstehe es auch nicht. Kann diese Antwort etwas konkreter sein? –