use*_*801 6 nsoperationqueue grand-central-dispatch
GCD允许根据4个全局优先级队列(高,默认,低,背景)将块调度到队列.我的应用程序中有几个NSOperationQueues但想要以不同的优先级运行每个.据我所知,NSOperationQueue是对GCD的抽象,并且希望为NSOperationQueue设置不同的优先级(类似于GCD优先级队列).有办法吗?(发现可以为操作设置优先级,但不能为队列本身设置优先级).
从iOS 8开始,NSOperationQueue有一个qualityOfService属性,它实现了我认为OP的含义.从类参考:
此属性指定应用于添加到队列的操作对象的服务级别.如果操作对象具有明确的服务级别集,则使用该值.[...]
服务级别影响操作对象访问系统资源(如CPU时间,网络资源,磁盘资源等)的优先级.具有较高服务质量水平的操作优先于系统资源,以便它们可以更快地执行其任务.您可以使用服务级别来确保响应显式用户请求的操作优先于不太关键的工作.
同样在iOS 8中,您可以更改与underlyingQueue属性一起使用的GCD队列,从而选择具有所需优先级的全局GCD队列.
引用自NSOperationQueue Class Reference。
队列中的操作(但尚未执行)本身根据优先级和操作间对象依赖性进行组织,并相应地执行。
操作间依赖关系为操作提供了绝对的执行顺序,即使这些操作位于不同的操作队列中。在操作对象的所有相关操作完成执行之前,操作对象不被视为准备好执行。对于准备执行的操作,操作队列总是执行相对于其他就绪操作具有最高优先级的操作。
这意味着根据设计,您无法为队列设置优先级,但 NSOperationQueue 将根据操作的单独优先级对各个操作使用 GCD 全局队列。
| 归档时间: |
|
| 查看次数: |
6515 次 |
| 最近记录: |