1

所以我有这个代码:

int i = 3;
dispatch_async(queue, ^{
    dispatch_async(dispatch_get_main_queue(), ^{
        for (;;)
        {
            t1 = [NSTimer scheduledTimerWithTimeInterval:i target:self selector:@selector(updateUI) userInfo:nil repeats:NO];
        }
    });
});

所以我正在做的是我在游戏中每 3 秒更新一次 UI,但我希望能够更改计时器关闭的时间间隔,所以我使用了一个无限循环,其中包含计时器。我的问题是,当我使用主队列时,它不会异步执行,但我需要使用主队列来更新 UI,所以我不知道该怎么做。

4

1 回答 1

2

如果您在主线程中创建 NSTimer,则选择器在主线程中调用。

- (void)updateTimer
{
    // destroy timer
    [t1 invalidate];
    // start new timer
    t1 = [NSTimer scheduledTimerWithTimeInterval:i target:self selector:@selector(updateUI) userInfo:nil repeats:NO];
}


- (void)updateUI
{
    ......
    [self updateTimer];
}

需要[self updateTimer]在启动应用程序中调用,以开始更新 UI。

于 2013-10-26T10:56:23.703 回答