iphone:performSelector:withObject:afterDelay:不能与后台线程一起使用?

时间:2010-08-31 23:11:25

标签: iphone objective-c iphone-sdk-3.0

我想在后台线程中运行一个方法,第一个方法将在几秒钟后在同一个(后台)线程上运行另一个方法。我写了这个:

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

但第二种方法从未被调用,为什么?而且,我怎么能实现我的目标呢?

感谢

1 个答案:

答案 0 :(得分:9)

你必须为performSelector运行一个运行循环:withObject:afterDelay:才能工作。


您的代码执行first,当first退出时,线程就会消失。你需要运行一个运行循环。

添加:

[[NSRunLoop currentRunLoop] run];

first

的末尾