NSOperationQueue 中的 adddependency 方法如何工作

6 cocoa-touch ios swift

我正在测试 NSOperationqueue

 queue = NSOperationQueue()
    let operation1 = NSBlockOperation(block: {
        let img1 = NSData(contentsOfURL: self.img1)
        NSOperationQueue.mainQueue().addOperationWithBlock({
            self.imgs1.image = UIImage(data: img1!)

        })
    })

    operation1.completionBlock = {
        print("Operation 1 completed")
    }
    queue.addOperation(operation1)




    let operation2 = NSBlockOperation(block: {
        let img2 = NSData(contentsOfURL: self.img2)
        NSOperationQueue.mainQueue().addOperationWithBlock({
            self.imgs2.image = UIImage(data: img2!)

        })
    })



    operation2.completionBlock = {
        print("Operation 2 completed")
    }
    queue.addOperation(operation2)

    let operation3 = NSBlockOperation(block: {
        let img3 = NSData(contentsOfURL: self.img3)
        NSOperationQueue.mainQueue().addOperationWithBlock({
            self.imgs3.image = UIImage(data: img3!)

        })
    })

    operation3.completionBlock = {
        print("Operation 3 completed")
    }
    queue.addOperation(operation3)

 operation3.addDependency(operation1)

}
Run Code Online (Sandbox Code Playgroud)

结果是

操作3完成

操作1完成

操作2完成

你能解释一下 addDependency 的工作原理吗

它应该像操作 1 一样首先完成?

如何依次执行?

如何创建依赖关系?

Far*_*rzi 6

你可以使用它:

operation3.addDependency(operation2)
operation2.addDependency(operation1)
Run Code Online (Sandbox Code Playgroud)

操作3将在操作2完成时开始,操作2将在操作1完成时开始。

注意:操作 1 应该在操作 2 开始之前完成

queue = NSOperationQueue()
    let operation1 = NSBlockOperation(block: {
        let img1 = NSData(contentsOfURL: self.img1)
        NSOperationQueue.mainQueue().addOperationWithBlock({
            self.imgs1.image = UIImage(data: img1!)

        })
    })

    operation1.completionBlock = {
        print("Operation 1 completed")
    }


    let operation2 = NSBlockOperation(block: {
        let img2 = NSData(contentsOfURL: self.img2)
        NSOperationQueue.mainQueue().addOperationWithBlock({
            self.imgs2.image = UIImage(data: img2!)

        })
    })



    operation2.completionBlock = {
        print("Operation 2 completed")
    }

    let operation3 = NSBlockOperation(block: {
        let img3 = NSData(contentsOfURL: self.img3)
        NSOperationQueue.mainQueue().addOperationWithBlock({
            self.imgs3.image = UIImage(data: img3!)

        })
    })

    operation3.completionBlock = {
        print("Operation 3 completed")
    }

    operation3.addDependency(operation2)
    operation2.addDependency(operation1)

    queue.addOperation(operation1)
    queue.addOperation(operation2)
    queue.addOperation(operation3)


}
Run Code Online (Sandbox Code Playgroud)