更改NSOperationQueue iOS中操作的优先级

更改NSOperationQueue iOS中操作的优先级,ios,objective-c,objective-c-blocks,nsoperationqueue,Ios,Objective C,Objective C Blocks,Nsoperationqueue,我正在以异步方式将操作添加到NSOperationQueue中。我有一个要求,比如我需要更改操作的优先级,比如我需要将a、B、C操作添加到队列中,我需要首先执行C操作。如果执行时出现错误,我必须以高优先级将该操作发送到队列。我在谷歌上搜索过,我们不能这样做。通过使用GCD,我们可以使用notify和wait来实现这一点。我有一个查询,如果我在异步中添加了a操作,在组通知中添加了B和C。在这种情况下,首先执行一个操作,然后执行B和C。如果我在执行操作A时出错,那么我会将其添加到组中,直到操作成功为

我正在以异步方式将操作添加到NSOperationQueue中。我有一个要求,比如我需要更改操作的优先级,比如我需要将a、B、C操作添加到队列中,我需要首先执行C操作。如果执行时出现错误,我必须以高优先级将该操作发送到队列。我在谷歌上搜索过,我们不能这样做。通过使用GCD,我们可以使用notify和wait来实现这一点。我有一个查询,如果我在异步中添加了a操作,在组通知中添加了B和C。在这种情况下,首先执行一个操作,然后执行B和C。如果我在执行操作A时出错,那么我会将其添加到组中,直到操作成功为止。在这个过程中,如果在添加操作A之后,谁将首先执行操作A或操作B/C。在我的需求中,操作A必须首先执行。我不熟悉blocks,请建议我是否可以通过队列或GCD实现。请提供一些相关代码。我需要一次执行一个任务。而且我使用的是maxConcurrentOperationCount=1。

NSOperationQueue或GCD队列都不需要。它们大多是FIFO队列,具有一些额外的智能性。此外,如果您需要多个并发操作,它们也会非常出色

在您的场景中(maxConcurrentOperationCount=1,带有自定义调度),普通的旧NSThread就可以了

首先,您需要实现一个优先级队列,或者重用一个这样做的库(一个示例-),但您可能必须对其进行调整,以支持在添加项后修改优先级

然后只需运行一个循环(在NSThread内),从队列中获取一个任务并运行它:

while (!isStopped) {
    NSOperation *task = [queue poll];
    [task main];
}

您可以重用NSOperation或创建自己的任务类型,这取决于您自己。您也可以使用
dispatch\u block\t
块作为任务。

感谢您的响应,我刚刚实现了如下GCD。dispatch\u group\u t group=dispatch\u group\u create();if([[props valueForKey:@“StartedSessn”]boolValue]){dispatch\u group\u enter(group)[self-pushEvnts:ev with properties:props group:group];///从服务器获得成功响应后,我就离开了该组。}否则{dispatch\u group\u notify(group,dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u HIGH,0),^{[self pushEvnts:ev with props-group:group];}如果首先将任务添加到通知组,然后再将另一个任务添加到通知组,则代码中有一件事。在这种情况下,将首先执行哪个任务。请建议。我不太明白如何使用此代码更改先前添加的任务的优先级。是的,实际上我正在将任务添加到通知组,但已启动的任务除外会话任务。此方法是等待,直到离开组调用right。我不确定我是否做对了,如果我做错了,请建议我。告诉我你想实现什么?你的任务在做什么?为什么要更改优先级?