2010-08-31 33 views
7

我想在後臺線程中運行一個方法,第一個方法會在幾秒鐘後在同一個(後臺)線程上運行另一個方法。我寫這個:iphone:performSelector:withObject:afterDelay:不適用於後臺線程?

- (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]; 
} 

但是第二種方法從來沒有被調用過,爲什麼?而且,我怎樣才能完成我的目標?

感謝

回答

9

你必須有performSelector運行的運行循環:withObject:afterDelay:上班。


你的代碼執行first,當first退出,線程消失了。你需要運行一個運行循環。

地址:

[[NSRunLoop currentRunLoop] run]; 

first結束。

+0

ouch ... no。這應該是問題。謝謝! – subzero 2010-09-01 00:05:55

+2

我不明白,你怎麼沒有運行循環? – bogardon 2011-11-29 23:49:57

+0

我也不明白。這個答案可以更具體一點嗎? – 2012-08-23 12:21:57