将优先级设置为NSOperationQueue

时间:2013-04-09 16:33:44

标签: grand-central-dispatch nsoperationqueue

GCD支持根据4个全局优先级队列(高,默认,低,背景)将块调度到队列。 我的应用程序中有几个NSOperationQueues但想要以不同的优先级运行每个。据我所知,NSOperationQueue是对GCD的抽象,并且希望为NSOperationQueue设置不同的优先级(类似于GCD优先级队列)。有办法吗? (发现可以为操作设置优先级,但不能为队列本身设置优先级。)

3 个答案:

答案 0 :(得分:5)

从iOS 8开始,NSOperationQueue具有qualityOfService属性,这就是我认为OP的含义。来自Class Reference

  

此属性指定应用于操作对象的服务级别   添加到队列中。如果操作对象具有显式服务   级别设置,而是使用该值。 [...]

     

服务级别会影响操作对象的优先级   允许访问系统资源,如CPU时间,网络资源,   磁盘资源等。具有更高服务质量的运营   级别优先于系统资源,以便它们   可以更快地完成他们的任务。您使用服务级别来确保   给出了响应显式用户请求的操作   优先于不太重要的工作。

同样在iOS 8中,您可以更改与underlyingQueue属性一起使用的GCD队列,从而选择具有所需优先级的全局GCD队列。

答案 1 :(得分:1)

来自NSOperationQueue Class Reference的引用。

  

队列中的操作(但尚未执行)本身就是   根据优先级和互操作对象组织   依赖关系并相应地执行。

     

操作间依赖关系提供绝对执行顺序   操作,即使这些操作位于不同的位置   操作队列。操作对象不被认为是准备好的   执行直到其所有相关操作都已完成执行。   对于准备执行的操作,操作队列始终   执行相对于另一个具有最高优先级的那个就绪   操作

这意味着在设计上,您无法为队列设置优先级,但NSOperationQueue将根据操作的个别优先级使用GCD全局队列进行单独操作。

答案 2 :(得分:-2)

尝试在您添加到队列的NSOperations上设置threadPriority