AFURLConnectionOperation'start'方法在准备好之前被调用,之后再也不会被调用

mut*_*.me 1 objective-c nsoperation afnetworking

我们在我们的应用程序中使用AFNetworking(https://github.com/AFNetworking/AFNetworking)和NSOperationStack(https://github.com/nicklockwood/NSOperationStack)来设置依赖关系,以便最后一次操作优先于队列中的其余操作(堆栈行为).当调用AFURLConnectionOperation的'start'方法时,我遇到了一个问题,但是由于依赖关系,操作的'isReady'方法返回NO.这使得"开始"立即退出.在第一次尝试开始操作之后,'start'方法永远不会被再次调用,因此操作永远不会达到isFinished状态,永远不会从队列中删除,最终操作会阻塞队列.我很感激在这件事上的任何想法.谢谢!

更多信息:没有任何操作被取消,我没有在队列中看到任何依赖关系圈.我们在现有的operationQueue上使用setLIFODependendenciesForOperation而不改变AFNetworking代码:[self.operationQueue setLIFODependendenciesForOperation:operation];

更新:现在,更多地考虑它,是否有可能在一个点上具有零依赖性并且当NSOperationQueue决定操作准备就绪时isReady返回YES,但是,当调用start()时,依赖项的数量变为1或者更多.

Ror*_*yan 5

这听起来像'NS'OperationStack您正在使用的Github项目的问题.

在将NSOperation依赖项添加到其中之后更改依赖项在NSOperationQueue文档中特别建议:

要点:在运行操作或将操作添加到操作队列之前,应始终配置依赖项.之后添加的依赖项可能无法阻止给定的操作对象运行.(来自:并发编程指南:配置互操作依赖性)

我认为更好的方法是LIFO在操作队列之外维护自己的堆栈,并使用一个操作的完成来触发下一个最重要的操作的排队.

或者,如果您不需要严格,也许您可​​以使用-[NSOperation setPriority:]以前的操作优先于之前的操作.