UITableView滚动期间主队列上的并发处理

时间:2015-06-16 17:40:45

标签: cocoa-touch grand-central-dispatch

我的应用程序中有一个秒表屏幕。

有一个主标签,表示每100毫秒的通过时间(不断更新)。

在该标签下方,在同一个ViewController中我有一个UITableView。

每当我滚动UITableView时,秒表标签就会停止更新。

我尝试使用Grand Central Dispatch如下,但是它没有用,我没想到会这样,因为它仍然是在同一队列上运行的两个操作。

dispatch_async(dispatch_get_main_queue(),^{
MyTimerObject *t = (MyTimerObject*)notification.object;
    lblMainTimer.text = t.MainTimerStringValue;});

那我该怎么办呢?

这一切都发生在NSNotification的receiveNotification方法中,这让我想知道在表滚动事件期间是不是NSNotification锁定而不是标签更新......

1 个答案:

答案 0 :(得分:0)

您的秒表是使用NSTimer还是CADisplayLink更新的?滚动时无法更新的问题通常是运行循环模式的错误选择。

例如,当tableview滚动时,这将暂停。

NSTimer *timer = [NSTimer timerWithTimeInterval:0.1 target:self selector:@selector(handleTimer:) userInfo:nil repeats:TRUE];
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

然而这不会:

[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

底线,不要使用NSDefaultRunLoopMode,而是使用NSRunLoopCommonModes,即使滚动表格视图,您也可能会发现它继续运行。