NSOperation

NSOperation的使用

创建NSOperationQueue

NSOperation *queue = [[NSOperationQueue alloc] init];
复制代码

创建NSOperation子类对象

NSOperation *operation = [[NSOperation alloc] init];

需要重写NSOperation任务执行函数。

MyOperation *operation = [[MyOperation alloc] init];
复制代码
operation.completionBlock = ^() {};
// 需注意,
//completionBolck的执行不在主线程,也不在operation的队列中。
//是系统分配的一个后台线程
复制代码

将NSOperation加入NSOperationQueue

[queue addOperation:operation];
复制代码

ios为了让我们更好的使用NSOperation,自定义了很多继承类

NSBlockOperation

+ (instancetype)blockOperationWithBlock:(void(^)(void))block;
复制代码

NSInvocationOperation

- (nullable instancetype)initWithTarget:(id)target selector:(SEL)sel object:(nullable id)arg;
复制代码

NSOperation并发数

系统默认提供:

@property NSInteger maxConcurrentOperationCount;
// = 1时,为Serial Queue
// > 1时,为Concurrent Queue@property (readonly)NSUInteger operationCount;
//表示当前正在执行的queue中有多少任务。
复制代码

GCD vs NSOperation

NSOperation支持取消。封装,能适应更复杂的操作和提供更精细化的控制。

既是queue被cancel了,最终仍会被执行。

等待

NSOperation不需要group的概念。

- (void)waitUntilFinished;
- (void)waitUntilAllOperationsAreFinished;
复制代码

Dependency

@interface NSOperation : NSObject {- (void)addDependency:(NSOperation *)op;- (void)removeDependency:(NSOperation *)op;
}@property (readonly, copy)NSArray<NSOperation *>*dependencies;
复制代码

循环依赖 显示循环依赖 隐式循环依赖

优先级

@property NSOperationQueuePriority queuePriority;
复制代码

Operation进入queue的原则是先进先出。但当优先级大的operation准备进入queue时,它会插队到比他小的operation前面。但不会替换掉正在执行的operation。

NSOperationQueue常用属性

@property (getter = isSuspended)BOOL suspended;
@property (nullable, copy)NSString *name;
@property NSQualityOfService qualityOfService;
复制代码

总结:

NSOperation和NSOperationQueue的基本概念

自定义NSOperation子类

NSOperation状态和取消

NSOperation Dependency

waitUntilFinished

name,优先级,暂停

串联NSOperation知识点相关推荐

  1. 原来Python用得好,工作这么好找

    Python是多数平台上写脚本和快速开发应用的编程语言,适用场景非常广,Web开发.大数据分析.机器学习.自动化运维/测试,甚至日常工作中的各种各样的问题都能用Python来解决.Python不仅可以 ...

  2. 弃 Windows 而拥抱 Linux 之后,这本书教了新玩法

    微软弃 Windows 而拥抱 Linux 之后,国内首本SQL Server On Linux的图书出版,这本书教了很多新玩法. SQL Server作为微软公司著名的数据库管理系统,多年以来一直稳 ...

  3. python基础教程多少钱-厦门厦禾路Python基础教程培训费用多少-泰兴市新闻

    厦门厦禾路Python基础教程培训费用多少-泰兴市新闻 [美力程]是厦门中信教育旗下,专注于中国6-18岁青少年STEAM创客教育的先锋品牌.依托中心20+年积累的计算机教育经验和职业IT精英教研团队 ...

  4. python自动化测试-python自动化测试

    系统教程:以实战项目为核心,多种测试框架 测试工具为基础的入门教程. 内容丰富:包括Selenium.Appium.Postman.Charles等10多种工具. 图示讲解:包括300多个图解展示,加 ...

  5. Python数据预处理:机器学习、人工智能通用技术(1)

    1 什么是数据预处理 数据预处理简而言之就是将原始数据装进一个预处理的黑匣子之后,产生出高质量数据用来适应相关技术或者算法模型.为了大家更明确的了解数据预处理,我们举个新闻分类的例子: 将原始的数据直 ...

  6. matlab与数学实验心得体会,数学matlab实验心得体会

    关于的数学学习心得 数学是一门重要的学科,相信大家都想学好它,下面我想和大家分享一下我的学习方法. 1.课时预习. 以前在初中时,没有课前预习的习惯. 后来上高中了,发现没有预习只是带着课本到课堂上听 ...

  7. Java实现-五子棋

    因为是用awt,swing的所做,是现在几乎被淘汰的java早期技术了,但是用来在开始学java时去串联其他知识点还是很好用的一个方式. 这个主要用了三个类,也是参考着现成的写的,不过优化了几个地方的 ...

  8. 有道English课程总结

      最近跟有道逻辑英语课程重新复习了一下英语语法,感觉还是比较有趣的,课程讲授的都是钟平自己创建的体系知识,虽然语法细节比较少,但是总结心得还是挺精辟的,如果你学了很久的英语,还是很痛苦,建议看钟平的 ...

  9. 数据分析可视化15 PyEcharts Flask 集成案例

    概述 上一节,我基于 PyEcharts 的官方案例,学习了 PyEcharts 与 Flask 整合的两种方法和数据刷新的两种实现机制.本节我会结合模块三:典型案例篇中的实际案例,带你了解如何基于 ...

最新文章

  1. python开发视频播放器_python视频播放器
  2. android studio ndk 书籍,NDK 在AndroidStudio3.2.1版本集成方法(ndk-build方式)
  3. transform css3 的使用及理解
  4. [转]TCP(HTTP)长连接和短连接区别和怎样维护长连接
  5. opencv cv::mat::data是什么数据类型?
  6. jms学习-基本概念(一)
  7. iOS开发 - StoryBoard + UIScrollView + UIView
  8. 实战:kafka实现日志收集系统
  9. 计算机考试用户名和密码,计算机模块考试忘记了用户名和密码怎么办
  10. kuka机器人外部轴异步_KUKA机器人外部轴标准配置
  11. ABAQUS 转子动力学载荷
  12. 数据库在开发中的作用
  13. HTML 编辑器-网页制作是用什么来做的?-2
  14. 科普:QLED和OLED到底有何区别?
  15. web项目查询mysql中文显示为问号_MySQL 表中的中文显示为问号
  16. mac强制退出程序的几种方法
  17. oracle数据库19c驱动包,Oracle Database 19c 19.3 Windows x64 64-bit 下载 安装
  18. 西门子S7-200PLC和昆仑通泰MCGS触摸屏控制步进伺服电机控制程序
  19. java计算机毕业设计H5醉美南湾湖网站设计MyBatis+系统+LW文档+源码+调试部署
  20. 死磕Android_OkHttp3 原理探究

热门文章

  1. SDWebImage
  2. [LeetCode]题解(python):153-Find Minimum in Rotated Sorted Array
  3. compass reset和layout [Sass和compass学习笔记]
  4. jquery 选择时间(小时)区间(四)
  5. Java虚拟机常见面试题
  6. TLS1.3 协议的Golang 实现——ClientHello
  7. Shuffle 相关
  8. Office 如何下载网页的视频 JWPlayer的内嵌视频
  9. 四十六、利用yarn多队列实现hadoop资源隔离
  10. 删除文件中指定的一行