嗨,我正在用Swift构建一个应用程序。我需要按特定的顺序处理通知。因此,我尝试使用addOperations waitUntilFinished。
以下是我所做的:
let oldify = NSOperation()
oldify.completionBlock = {
println("oldify")
}
let appendify = NSOperation()
appendify.completionBlock = {
println("appendify")
}
let nettoyify = NSOperation()
nettoyify.completionBlock = {
println("nettoyify")
}
NSOperationQueue.mainQueue().maxConcurrentOperationCount = 1
NSOperationQueue.mainQueue().addOperations([oldify, appendify, nettoyify], waitUntilFinished: true)使用此代码,不执行任何操作。当我尝试这样做的时候:
NSOperationQueue.mainQueue().maxConcurrentOperationCount = 1
NSOperationQueue.mainQueue().addOperation(oldify)
NSOperationQueue.mainQueue().addOperation(appendify)
NSOperationQueue.mainQueue().addOperation(nettoyify)操作被执行,但顺序不对。
有人知道我做错了什么吗?我对快速而全新的NSOperations充满信心
发布于 2015-05-01 18:56:05
以下几个问题:
completionBlock文档所述:
未保证完成块的确切执行上下文,但通常是次要线程。因此,您不应该使用这个块来执行任何需要非常特定的执行上下文的工作。队列将管理操作本身,但不管理它们的完成块(除非确保操作在其completionBlock启动之前完成)。因此,底线是,不要假设(a)在运行完成块时,(b)一个操作的completionBlock与其他操作或它们的completionBlock块之间的关系等等,也不要(c)在哪个线程上执行它们。
isReady方法返回YES-they是按照提交到队列的顺序执行的。但是,您不应该依赖队列语义来确保操作对象的特定执行顺序。操作准备状态的更改可以更改结果的执行顺序。如果需要按特定顺序执行操作,请使用NSOperation类定义的操作级依赖项。要建立显式依赖关系,可以执行如下操作:
让oldify = NSBlockOperation() { NSLog("oldify") } oldify.completionBlock ={ NSLog("oldify完成“)}让NSBlockOperation=NSBlockOperation( NSLog(" appendify ") } appendify.completionBlock ={ NSLog("appendify完成”)} appendify.addDependency(oldify)让nettoyify =NSBlockOperation( NSLog("nettoyify") } nettoyify.completionBlock ={ NSLog("nettoyify完成“)} nettoyify.addDependency(appendify) nettoyify.addDependency= NSOperationQueue() queue.addOperations=NSOperationQueue(附录,网络化,waitUntilFinished: false)
waitUntilFinished一起添加到主队列中。可以随意地将它们添加到不同的队列中,但不要使用waitUntilFinished选项从串行队列发送回它自己。https://stackoverflow.com/questions/29992735
复制相似问题