Mac OS,控制台应用程序。 performSelector:withObject:afterDelay:不起作用?

时间:2014-02-10 20:59:44

标签: objective-c macos selector delay performselector

我在其中创建了一个简单的单例和运行方法:

- (void)run {

    static int times = 0;
    NSLog(@"times = %d", times++);

    [self performSelector:@selector(run) withObject:nil afterDelay:MIN_DELAY];
}

但它没有正常运作。它只执行一次。

但如果我用performSelector:withObject:afterDelay:替换performSelector:,那么它会被调用很多次(但我需要在两次调用之间延迟)。

那么为什么方法performSelector:withObject:afterDelay:不起作用?我可以使用这种方法吗?

2 个答案:

答案 0 :(得分:3)

-performSelector:withObject:afterDelay:的调用需要运行循环。默认情况下,控制台应用程序不会将控制权传递给运行循环。有关详细信息,请搜索NSRunLoop。

答案 1 :(得分:3)

来自文档:

  

此方法向其当前上下文的runloop注册,并依赖于定期运行的runloop以正确执行。

你没有runloop。事实上,这种方法对你来说效果不正确。

(创建和启动runloop是调用UIApplicationMain所做的事情之一,但当然你永远不会调用它。)