如何运行异步操作

时间:2017-05-24 19:07:46

标签: ios swift

例如,我有这个自定义操作:

class CustomOperation: Operation {

    override init() {
        super.init()
        self.qualityOfService = .userInitiated
    }

    override func main() {
        // ..
    }
}

这就是我正在做的运行CustomOperation

let customOperation = CustomOperation()
customOperation.completionBlock = { print("custom operation finished") }
customOperation.start()

我有几个CustomOperation试图同时运行。无论如何都要在不为每个OperationQueue创建CustomOperation的情况下运行异步?因为isAsynchronous属性是只读的。

1 个答案:

答案 0 :(得分:1)

您不必为每个操作创建队列。您可以将它们全部放在同一个队列中。队列maxConcurrentOperationCount确定同时运行的数量。

如果您根本不想使用队列,则需要覆盖start()和isAsynchronous()并让start()启动一个线程并运行。你需要做的还有更多(阅读文档)

https://developer.apple.com/reference/foundation/operation

转到“覆盖部分的方法”

  

如果要创建并发操作,则至少需要覆盖以下方法和属性:

     
      
  • 开始()
  •   
  • isAsynchronous
  •   
  • isExecuting
  •   
  • isFinished
  •   
     

在并发操作中,start()方法负责以异步方式启动操作。无论是生成线程还是调用异步函数,都可以通过此方法完成。在开始操作时,start()方法还应该更新isExecuting属性报告的操作的执行状态。您可以通过发送isExecuting密钥路径的KVO通知来执行此操作,该路径允许感兴趣的客户端知道该操作现在正在运行。您的isExecuting属性还必须以线程安全的方式提供状态。