ios - adddependency 方法在 NSOperationQueue 中的工作原理

标签 ios swift cocoa-touch

我正在测试 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)

}

结果是

Operation 3 completed

Operation 1 completed

Operation 2 completed

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

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

如何一个接一个地执行?

如何创建依赖?

最佳答案

你可以使用它:

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

operation2完成后operation3开始,operation1完成后operation2开始

注意:operation1 应该在 operation2 开始之前完成

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)


}

关于ios - adddependency 方法在 NSOperationQueue 中的工作原理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39100653/

相关文章:

ios - AppDelegate 抛出 NSInternalInconsistencyException

ios - 不同 iPhone 上的动画

ios - UICollectionView 在刷新时重复和重新排序单元格内容

ios - 试图在 swift 中检测 iphone x 总是返回 false

ios - 使用 MPMoviePlayerController 或 AVPlayer (iOS) 播放受 M4V 保护的内容

iphone - 在运行时删除 UIImageView 中的图像背景

ios - 为什么有时可以将 NSArray 转换为 NSMutableArray,有时却不能?

ios - CALayer似乎保留了它的内容——如何释放资源?

ios - 使用 Parse 用户进行 Firebase 身份验证

ios - 检查互联网连接 queryForTable Parse