iOS:组织多线程的最佳方式

时间:2012-06-03 08:07:08

标签: iphone ios grand-central-dispatch nsthread nsoperation

伙计我需要一些帮助才能在iOS中构建我的多线程。

我在代码中使用ARC。

基本上我需要关注,

在我的主线程中,nstimer触发了一些应该在一个单独的线程中执行的方法,该线程进行一些计算并将数据放入某些ivar,另一个线程应该从该ivar读取数据并进行其他计算,即如果有是没有数据,第二个线程应该等到有任何数据。

所以基本上我想听听一些建议哪些技术是我的任务的最佳选择,使用可可线程(NSThread),GCD或操作队列。

也有人可以在两个线程之间的相互阻塞/同步方面为我提供一些伪代码。

2 个答案:

答案 0 :(得分:1)

由于您说某些计算应该等待其他计算完成,我会说您应该查看NSOperation并为不同的操作设置依赖关系(使用addDependency)。

答案 1 :(得分:0)

除非你遗漏了我们的问题描述,否则这非常适合GCD /块组合。事实上,我甚至不会使用NSTimer(GCD提供了更好的替代方案 - 请参阅dispatch_source_create,例如创建基于GCD的计时器),但那是你的电话,而不是问题。无论如何,GCD ......

- (void)handleTimer:(NSTimer *)timer {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        __block id someObject;
        // Do work...  manipulate someObject in some manner...
        // When done, invoke other thread... main thread in this case
        dispatch_async(dispatch_get_main_queue(), ^{
            // This code is running in a different thread, and can use someObject directly
        });
    });
}