IOS多线程之NSOperation(3)

操作优先级和服务质量

可以通过QueuePriority属性来设置operation在队列中的执行优先级

public enum QueuePriority : Int, @unchecked Sendable {
case veryLow = -8
case low = -4
case normal = 0
case high = 4
case veryHigh = 8
}

IOS8.0之后推荐使用QualityOfService来设置operation在队列中的服务质量

@available(iOS 8.0, *)
public enum QualityOfService : Int, @unchecked Sendable {
case userInteractive = 33
case userInitiated = 25
case utility = 17
case background = 9
case `default` = -1
}

创建三个Operation

let op1 = BlockOperation {
print("op1")
}
let op2 = BlockOperation {
print("op2")
}
let op3 = BlockOperation {
print("op3")
} queue.addOperations([op1,op2,op3], waitUntilFinished: true)

设置其queuePriority

op1.queuePriority = .low
op2.queuePriority = .high
op3.queuePriority = .veryHigh queue.addOperations([op1,op2,op3], waitUntilFinished: true) //打印
/*
op3
op2
op1
*/

设置其qualityOfService

op1.qualityOfService = .background
op2.qualityOfService = .utility
op3.qualityOfService = .userInitiated //打印
/*
op3
op2
op1
*/

操作间依赖

Operation 之间可以通过以下方法添加/移除依赖来保证执行顺序

//添加依赖
open func addDependency(_ op: Operation)
//移除依赖
open func removeDependency(_ op: Operation)

比如op1依赖于op3,op3依赖于op2

不可以相互依赖

执行顺序为op2 -> op3 -> op1

op1.addDependency(op3)
op3.addDependency(op2) //打印
/*
op2
op3
op1
*/

可以在不同队列中添加依赖

将op1,op2,op3添加到我们的OperationQueue

新建一个op4依赖于op1,将op4添加到主线程队列

let op4 = BlockOperation {
print("主线程op4")
} op4.addDependency(op1)
op1.addDependency(op3)
op3.addDependency(op2) OperationQueue.main.addOperation(op4) //打印
/*
op2
op3
op1
主线程op4
*/

IOS多线程之NSOperation(3)的更多相关文章

  1. iOS多线程之NSOperation详解

    使用NSOperation和NSOperationQueue进行多线程开发,只要将一个NSOperation(实际开发中需要使用其子类 NSInvocationOperation,NSBlockOpe ...

  2. iOS 多线程之NSOperation篇举例详解

    这篇博客是接着总篇iOS GCD NSOperation NSThread等多线程各种举例详解写的一个支篇.总篇也包含了此文的链接.本文讲解的知识点有NSBlockOperationClick,队列, ...

  3. IOS多线程之NSOperation学习总结

    NSOperation简介 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQu ...

  4. iOS多线程之NSOperation,NSOperationQueue

    使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...

  5. (五十六)iOS多线程之NSOperation

    NSOpertation是一套OC的API,是对GCD进行的Cocoa抽象. NSOperation有两种不同类型的队列,主队列和自定义队列. 主队列运行于主线程上,自定义队列在后台运行. [NSBl ...

  6. iOS多线程之NSOperation和NSOperationQueue的使用

    一:NSOperation 两个子类+重写main方法 NSInvocationOperation NSBlockOperation 有个类方法 BlockOprationWith: 还有就是自己个子 ...

  7. ios多线程之NSOperation

    使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...

  8. iOS多线程之8.NSOPeration的其他用法

      本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

  9. iOS多线程之GCD小记

    iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...

  10. 多线程之NSOperation

    关于多线程会有一系列如下:多线程之概念解析 多线程之pthread, NSThread, NSOperation, GCD 多线程之NSThread 多线程之NSOperation 多线程之GCD

随机推荐

  1. C#/.NET/.NET Core开发实战教程集

    DotNetGuide介绍 DotNetGuide是一个专注于C#/.NET/.NET Core学习.工作.面试指南的GitHub知识库,该知识库在GitHub中Star数已突破6.5k+当然这离不开 ...

  2. Blazor与IdentityServer4的集成

    本文合并整理自 CSDN博主「65号腕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. Blazor与IdentityServer4的集成(一) IdentityS ...

  3. 解决Spring Data JPA Hibernate的N+1查询问题的性能优化最佳方法

    最佳方法:定制@NamedEntityGraph.定制查询和定制VO,可以做到按照需要最佳查询,需要注意的地方:定制VO的字段一定要等于或小于实际查询的字段,才不会复制的时候触发N+1查询. 1 问题 ...

  4. C # 的 IsNullOrEmpty

    作用:判断字符串是否是 null 或者 "" 如果是 null or "" 就返回 true IsNullOrEmpty是判断字符串的Null值和"& ...

  5. 什么是 Ajax,Ajax 的原理,Ajax 都有哪些优点和缺点

    ajax是异步的js和xml,是一种创建交互式网页的开发技术,是和服务器进行异步通讯的技术 : 核心就是使用XMLHttpRequest向服务器发送请求获取数据 : 优点: 页面不需要刷新,用户体验良 ...

  6. centos7.6源码方式安装python3.6.8

    1 安装依赖包 centos7.6是没有自带python3的 [root@opgs201 ~]# cat /etc/redhat-release CentOS Linux release 7.6.18 ...

  7. 云原生周刊:K8s 中的服务和网络 | 2024.4.29

    开源项目推荐 k8s-image-swapper k8s-image-swapper 是 Kubernetes 的一个变更 Webhook,它将镜像下载到自己的镜像仓库,并将镜像指向该新位置.它是 d ...

  8. 使用 KubeKey 在 AWS 高可用部署 Kubernetes

    作者:李耀宗 介绍 对于生产环境,我们需要考虑 Kubernetes 集群的高可用性.本文教您部署如何在多台 AWS EC2 实例快速部署一套高可用的生产环境.要满足 Kubernetes 集群服务需 ...

  9. 云原生爱好者周刊:Cilium 放大招,发布服务网格 Beta 版

    云原生一周动态要闻: Cilium 推出服务网格测试计划 Knative 已申请成为 CNCF 的孵化项目 Kubernetes v1.23 即将发布 Lens 5.3 发布 开源项目推荐 文章推荐 ...

  10. RAC环境中某数据文件(非system表空间)创建在本地,不停机迁移到ASM磁盘中

    Datafiles are mistakenly built into the local file system for processing in the RAC environment The ...