2010-08-31 2 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 ... нет. Это должно быть проблемой. Благодаря! – subzero

+2

Я не понимаю, как у вас нет цикла запуска? – bogardon

+0

Я тоже не понимаю. Может ли этот ответ быть более конкретным? –