异步更新UI的正确方法是什么?

时间:2013-10-26 02:42:21

标签: ios objective-c uikit

所以我有这段代码:

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,所以我不知道该怎么做。

1 个答案:

答案 0 :(得分: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。