文档章节

GCD 和 NSOperation 区别及各自应用场景

壹峰
 壹峰
发布于 2017/07/12 11:27
字数 696
阅读 10
收藏 0

GCD 相关知识以前写过一些东西,点击查看 
GCD主要特点: 
1)GCG 是iOS4.0推出的,主要针对多核CPU 做了优化 
2)GCD是 C 语言的技术 
3)GCD 提供了一些 NSOperation 不具备的功能,比如一次性执行(创建单例),延迟执行,调度组.

NSOperation 特点: 
1) NSOperation 是 iOS2.0后推出的,iOS4.0之后重写了NSOperation. 
2) NSOperation 将操作(异步的任务)添加到队列(并发队列),就会执行制定操作的函数. 
3) NSOperation里可以方便的设置操作: 
1⃣️最大并发数 
2⃣️队列的暂停/继续 
3⃣️取消所有的操作 
4⃣️指定操作之间的依赖关系(GCD可以用同步实现) 
**使用NSOperation 需要注意几点点: 
1) 注意避免产生循环依赖 
2) 要先设置依赖关系,然后添加到队列

GCD 和 NSOperation的区别主要表现在以下几方面:

1) GCD是一套 C 语言API,执行和操作简单高效,因此NSOperation底层也通过GCD实现,这是他们之间最本质的区别.因此如果希望自定义任务,建议使用NSOperation;

2) 依赖关系,NSOperation可以设置操作之间的依赖(可以跨队列设置),GCD无法设置依赖关系,不过可以通过同步来实现这种效果;

3) KVO(键值对观察),NSOperation容易判断操作当前的状态(是否执行,是否取消等),对此GCD无法通过KVO进行判断;

4) 优先级,NSOperation可以设置自身的优先级,但是优先级高的不一定先执行,GCD只能设置队列的优先级,如果要区分block任务的优先级,需要很复杂的代码才能实现;

5) 继承,NSOperation是一个抽象类.实际开发中常用的是它的两个子类:NSInvocationOperation和NSBlockOperation,同样我们可以自定义NSOperation,GCD执行任务可以自由组装,没有继承那么高的代码复用度;

6) 效率,直接使用GCD效率确实会更高效,NSOperation会多一点开销,但是通过NSOperation可以获得依赖,优先级,继承,键值对观察这些优势,相对于多的那么一点开销确实很划算,鱼和熊掌不可得兼,取舍在于开发者自己;

7)可以随时取消准备执行的任务(已经在执行的不能取消),GCD没法停止已经加入queue 的 block(虽然也能实现,但是需要很复杂的代码)

基于GCD简单高效,更强的执行能力,操作不太复杂的时候,优先选用GCD;而比较复杂的任务可以自己通过NSOperation实现.

本文转载自:

共有 人打赏支持
壹峰
粉丝 7
博文 541
码字总数 7328
作品 0
广州
其他
iOS多线程全面解读(三):NSOperation

写在前面 本系列文章列表 概述、NSThread GCD NSOperation 锁 NSOperation是基于GCD的面向对象封装,在各大开源库里面我们常常看到它的身影。它的使用很简单易懂,基本上你点进Api就会用了,...

indulge_in
2017/11/30
0
0
iOS面试题总结(三)

iOS面试(三) 1.MVC具有什么样的优势,各个模块之间怎么通信,比如Button后怎么通知Model MVC是一种设计思想,是一种架构模式,是一种把应用所有类组织起来的策略。他们把程序分成3块。 M: 存储...

沧州宁少
2017/12/06
0
0
iOS多线程编程技术NSThread; NSOperation、GCD三者使用详解

三种方式的优缺点介绍: 1)NSThread 优点:NSThread 比其他两个轻量级 缺点:需要自己管理线程的生命周期,线程同步。线程同步对数据的加锁会有一定的系统开销 2)Cocoa NSOperation 优点:不...

caoxiang
2015/08/22
0
0
iOS NSThread、NSOperation与GCD

一、NSThread线程 优点: NSThread 比其他两个轻量级、使用方便、简洁。 缺点: ①需要自己管理线程的生命周期。 ②线程同步,线程同步对数据的加锁会有一定的系统开销 NSThread线程的使用:...

IamOkay
01/15
1
0
【iOS】多线程NSOperation

NSOperation是苹果封装的一套多线程的东西,不像GCD是纯C语言的,这个是OC的。但相比较之下GCD会更快一些,但本质上NSOPeration是多GDC的封装。 一、NSOperation与GCD的比较 GCD是基于c的底层...

xn4545945
2014/07/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kafka技术资料总结(不断更新中)

1、Kafka实践:到底该不该把不同类型的消息放在同一个主题中

九州暮云
30分钟前
1
0
面向对象设计原则(OOP)

单一职责原则(Single responsibility principle)又称单一功能原则。它规定一个类应该只有一个发生变化的原因。 核心原则:低耦合,高内聚。 一个类,应该只有一个引起它变化的原因,也就是...

gackey
今天
4
0
C++ 锁

C++提供了两种常用的锁,std::lock_guard<Lockable &T>和std::unique_lock<Lockable &T>。通常使用场景下,这两个锁用法一致。即,在构造锁对象时上锁,在析构锁对象时解锁。使用户从上锁/解...

yepanl
今天
4
0
Kali Linux Docker 練習

docker pull kalilinux/kali-linux-docker docker run -t -i kalilinux/kali-linux-docker /bin/bash apt-get update apt-get install htop apt-get install nmap apt-get install wpscan ap......

BaiyuanLab
今天
4
0
通俗大白话来理解TCP协议的三次握手和四次分手

最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就...

onedotdot
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部