并行NSTimers多线程

时间:2013-11-28 14:23:47

标签: ios objective-c multithreading

我有两个NSTimers应该从另一个并行运行。每个计时器控制UI的特定部分(Timer1 = UI A,Timer2 = UI B)。只要其各自的计时器达到X区间,UI AUI B就会发生变化。但是,为了进行更改,UI A需要检查UI B的状态。

当我运行两个NSTimers时,它们之间有1秒的延迟:

    firstSemaphoreTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(firstTimerTick) userInfo:nil repeats:YES];
    secondSemaphoreTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(secondTimerTick) userInfo:nil repeats:YES];

如何使用线程同步这两个计时器?或者你推荐什么方法?

1 个答案:

答案 0 :(得分:0)

您不需要两个计时器。您可以使用一个计时器处理这两个任务。

NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(tick:) userInfo:nil repeats:YES];
// ...
-(void)tick:(sender)id{

void(^processBlock)(void)= ^{
    // process UI 1 and 2     
};
if([NSThread isMainThread]){
    processBlock();
}else{
    dispatch_async(dispatch_get_main_queue(), processBlock);
}
}

即使使用两个计时器,也无法同时更新UI,因为它是在主队列上完成的。如果在更新依赖于它的UI后还有其他事情要做,您可以随时通过调用dispatch_sync来同步调度块。