我正在异步地将操作添加到NSOperationQueue。我有一个要求,比如我需要更改操作的优先级,就像我将A,B,C操作添加到队列中一样,我需要先执行C操作。如果我执行了一些错误,我必须对具有高优先级的队列执行该操作。我用Google搜索,我们不能这样做。通过使用GCD,我们可以使用通知和等待这样做。我有一个查询,如果我在异步中添加了A操作,并在组notify中添加了B和C.在该操作中,首先执行操作,然后执行B和C.如果我在执行操作A时遇到错误,那么我将其添加到组中,直到除非操作成功。在此过程中,如果在添加操作A之后,将首先执行操作A或操作B / C.在我的要求中,操作A必须首先执行。我是新手,如果我们可以通过队列或GCD实施,请建议我。请提供一些相关的代码。我需要执行一个任务。我也使用maxConcurrentOperationCount = 1.
答案 0 :(得分:0)
NSOperationQueue或GCD队列都不是priority queues。它们大多是FIFO队列,具有一些额外的智能。如果您需要多个并发操作,它们也会发挥最佳效果。
在你的场景中(带有自定义调度的maxConcurrentOperationCount = 1),一个普通的旧NSThread就可以了。
首先,您需要实现事物的优先级队列或重用执行该操作的库(一个示例 - atljeremy PriorityQueue,但您可能必须对其进行调整以支持在项目之后修改优先级加入。
然后只运行一个循环(在NSThread中),从队列中获取任务并运行它:
while (!isStopped) {
NSOperation *task = [queue poll];
[task main];
}
您可以重复使用NSOperation或创建自己的任务类型,这取决于您。您还可以使用dispatch_block_t
块作为任务。