dependencies:
我们可以在 operation 间添加依赖关系,在某个 operation 所依赖的 operations 完成之前,其一直处于未就绪状态(isReady 为 NO)。
需要注意的是,依赖关系是 operation 自身的状态,也就是说有依赖关系的 operations 可以处在不同的 NSOperationQueue 中。
isReady:
isReady 默认实现主要处理 operation 间的依赖关系,当我们自定义该方法时需要考虑 super 的值,如 AFURLConnectionOperation中关于 isReady 的实现:
qualityOfService:
用于表示 operation 在获取系统资源时的优先级,默认值:NSQualityOfServiceBackground,我们可以根据需要给 operation 赋不同的优化级,如最高优化级:NSQualityOfServiceUserInteractive。
queuePriority:
用于设置 operation 在 operation queue 中的相对优化级,同一 queue 中优化级高的 operation(isReady 为 YES) 会被优先执行。需要注意区分qualityOfService(在系统层面,operation 与其他线程获取资源的优先级)与queuePriority(同一 queue 中 operation 间执行的优化级)的区别。
同时,需要注意dependencies(严格控制执行顺序)与queuePriority(queue 内部相对优先级)的区别。
NSOperation Queue
NSOperation Queue 用于管理、执行 NSOperation,无论其中的 operation 是并行还是串行,queue 都会在子线程(借用 GCD)中执行 operation。
从上小节我们知道,实现异步 operation 比同步 operation 要复杂许多,因此如果打算将 operation 加入 queue 中,则完全可以将 operation 实现为同步方式。
对于 queue 中已就绪的 operation,queue 会选择 queuePriority 值最大的 operation 执行。
关于 NSOperation Queue 有两点需要强调:
cancelAllOperations:用于取消队列中的 operations,对 queue 中所有 operations 调用 cancel方法。(对 operation 调用 cancel 方法后的效果完全由 operation 自己决定。cancel 唯一能影响的就是清除 operation 的依赖关系,使其立即可以被执行)。此时 queue 并不会 remove 其中的 operations,remove 操作仅发生在 operation 完成时。
suspended:将该属性置为 YES,会阻止 queue 执行新的 operation,但已经在执行中的 operation 不受此影响。