代码之家  ›  专栏  ›  技术社区  ›  Marcin Kapusta

等待两个NSOperation完成而不阻塞UI线程

  •  0
  • Marcin Kapusta  · 技术社区  · 7 年前

    我刚刚读了NSOperationQueues和NSOperation的详细介绍 here

    如何等待这2个操作完成,然后继续计算?我不想阻止UI线程。我是否应该创建另一个主方法正在创建两个NSOperations的NSOperation,将它们添加到某个本地(对于该操作)队列并使用 waitUntilAllOperationsAreFinished 方法。然后继续计算?

    我不喜欢这种方法,每次创建新操作时都需要创建本地队列。我可以这样设计吗?我可以重用一个队列而只等待两个本地操作吗?我可以想象这种方法 等待操作完成 可以等到所有的任务都完成了,这样当很多任务并行执行时,它就会阻塞。有什么设计建议吗?正在创建 NSOperationQueue 贵吗?有没有更好的方法在iOS中不使用 NSOperation 操作队列

    1 回复  |  直到 7 年前
        1
  •  0
  •   wzso    7 年前

    在Swift 4中,您可以这样做:

    let group = DispatchGroup()
    // async
    DispatchQueue.global().async {
        // enter the group
        group.enter()
        taskA(onCompletion: { (_) in
            // leave the group
            group.leave()
        })
        group.enter()
        taskB(onCompletion: { (_) in
            group.leave()
        })
    }
    
    group.notify(queue: DispatchQueue.main) {
        // do something on task A & B completion
    }
    

    还有一个关于GCD的很好的教程 raywenderlich.com .

    推荐文章