NSTimer不能在另一个线程中工作

时间:2012-05-30 02:31:37

标签: iphone objective-c multithreading

我在使用NSTimer时遇到问题,代码如下,我简化了代码:

- (void) mainThreadFun
{
    [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(test) userInfo:nil repeats:YES];

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
           [NSTimer scheduledTimerWithTimeInterval:0.02 target:self selector:@selector(test1) userInfo:nil repeats:YES];
    });

}

我发现mainThread中的NSTimer工作但是另一个线程中的NSTimer不起作用。为什么会发生这种情况?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:5)

您无法在GCD队列中使用NSTimer。 NSTimer需要NSRunLoop才能运行,GCD队列没有NSRunLoop。

如果您想要使用GCD队列的计时器功能,您应该使用dispatch_after()作为一次性计时器,或使用dispatch_source作为重复计时器。