为什么CFRunLoopRun不起作用?

时间:2012-01-12 11:22:12

标签: iphone objective-c ios cfrunloop

[self request]; //main thread

- (void)request {
    [self performSelectorInBackground:@selector(regFun) withObject:nil];
}

- (void)regFun {
    CFRunLoopRun();
    CCLOG(@"CFRunLoopRun not work");
}

鉴于以前的代码,你知道为什么CFRunLoopRun()无效吗?我需要在后台调用regFun

还有其他方法可以阻止后台线程吗?

3 个答案:

答案 0 :(得分:1)

它可以工作。

[self request]; //main thread

- (void)request {
    //[self performSelectorInBackground:@selector(regFun) withObject:nil];
    [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(regFun) userInfo:nil repeats:NO];
}

- (void)regFun {
    CFRunLoopRun();
    CCLOG(@"CFRunLoopRun not work");
}

但我不确定这是正确的方法,我也不知道发生了什么。 :(

答案 1 :(得分:1)

好的,既然你没有告诉我们你真正需要做什么,那就让我猜吧。如果您只想在后台运行选择器,请尝试Grand Central Dispatch:

- (void) request {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [self regFun];
    });
}

- (void) regFun {
    // Running in background, with a run loop available
    // and an autorelease pool, too. After the code finishes:
    dispatch_async(dispatch_get_main_queue(), ^{
        // Will be called on the main thread.
        [self reportBackgroundTaskFinished];
    });
}

答案 2 :(得分:0)

regFun位于后台线程中,因此对CFRunLoopRun()的调用会在此线程中创建并运行一个运行循环。只有运行循环没有任何附加信息,所以它会立即退出。