更改NSOperationQueue iOS

时间:2018-05-08 07:20:08

标签: ios objective-c objective-c-blocks nsoperationqueue

我正在异步地将操作添加到NSOperationQueue。我有一个要求,比如我需要更改操作的优先级,就像我将A,B,C操作添加到队列中一样,我需要先执行C操作。如果我执行了一些错误,我必须对具有高优先级的队列执行该操作。我用Google搜索,我们不能这样做。通过使用GCD,我们可以使用通知和等待这样做。我有一个查询,如果我在异步中添加了A操作,并在组notify中添加了B和C.在该操作中,首先执行操作,然后执行B和C.如果我在执行操作A时遇到错误,那么我将其添加到组中,直到除非操作成功。在此过程中,如果在添加操作A之后,将首先执行操作A或操作B / C.在我的要求中,操作A必须首先执行。我是新手,如果我们可以通过队列或GCD实施,请建议我。请提供一些相关的代码。我需要执行一个任务。我也使用maxConcurrentOperationCount = 1.

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块作为任务。