在多线程开发中,我们常用到GCD,这里探讨一下GCD任务的取消: 1.在iOS 8以后,系统给我们提供了这样的取消函数 dispatch_block_cancel,不过这个也只能用于dispatch_block_create...2.很多时候,我们的场景不会去用dispatch_block_create创建dispatch_block_t,这个时候我们若想取消一个任务,可以考虑用一个条件来做,满足条件则执行此任务,不满足则不执行...NSOperation是对GCD的封装,底层也是GCD。...NSOperation给我们封装了更多的api,这是我在Xcode中提出来的: @interface NSOperation : NSObject { @private id _private;...*)op; - (void)removeDependency:(NSOperation *)op; @property (readonly, copy) NSArrayNSOperation *>
NSOperation NSOperation类是用来封装在单个任务相关的代码和数据的抽象类。NSOperation 是苹果公司对 GCD 的封装,完全面向对象,所以使用起来更好理解。...** 因为它是用来封装任务的,大家可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列, 但是NSOperation本身又有执行多线程的能力跟GCD...NSOperation 之间添加依赖 NSOperation 有一个非常实用的功能,那就是对任务添加依赖。...; [queue setSuspended:YES]; // 暂停queue [queue setSuspended:NO]; // 继续queue NSOperation和GCD的区别和类似的地方...),是否取消(isCanceld) GCD的执行速度比NSOperationQueue快 **任务之间没有什么依赖关系,而是需要更高的并发能力:GCD ** 任务之间有依赖、或者要监听任务的执行情况
封装更完善的GCD,GCD提供了极其便捷的方法来编写多线程程序,可以自动实现多核的真正并行计算,自动管理线程的生命周期,好处不言而喻,但可定制性就有点不足了,Foundation框架提供了NSOperation...和NSOperationQueue这一面向对象的多线程类,这两个类与GCD提供的功能类似,NSOperation提供任务的封装,NSOperationQueue顾名思义,提供执行队列,可以自动实现多核并行计算...NSOperation “任务的封装” 和GCD类似,GCD向队列提交任务,NSOperation就是对任务进行的封装,封装好的任务交给不同的NSOperationQueue即可进行串行队列的执行或并发队列的执行...NSOperationQueue NSOperationQueue就是任务的执行队列,看一下该类中有哪些比较重要的属性和方法: //向队列中添加一个任务 - (void)addOperation:(NSOperation...的源码时可以发现,这些库中大量用了NSOperation和NSOperationQueue,当然也用了GCD,比如SDWebImage下载图片的任务是自定义的NSOperation子类SDWebImageDownloaderOperation
NSOperation & NSOperationQueue : GCD 的封装,面向对象 2、GCD有哪些队列,默认提供哪些队列 主队列 > `dispatch_get_main_queue()` 全局并发队列...但是相比于 GCD 与 NSOperation / NSOperationQueue 来说更加轻量。...dispatch_after 比 NSTimer 优秀,因为他不需要指定 Runloop 的运行模式。...两者分别对应 GCD 的任务与队列。相比 GCD,NSOperation 和 NSOperationQueue 更加简单易用,代码可读性也更高,但是系统开销会稍微大一点。...借用 大佬的一张思维导图 来说明相关的知识点: [rpfvl2ne36.png] 3.1 操作 NSOperation NSOperation 翻译过来就是 “操作”,对应 GCD 中的任务。
三、多线程的四种解决方案 多线程的四种解决方案分别是:pthread,NSThread,GCD, NSOperation。下图是对这四种方案进行了解读和对比。 ?...的理解与使用 No.1:GCD的特点 GCD会自动利用更多的CPU内核 GCD自动管理线程的生命周期(创建线程,调度任务,销毁线程等) 程序员只需要告诉 GCD 想要如何执行什么任务,不需要编写任何线程管理代码...控制线程数量:GCD 不像 NSOperation 那样有直接提供线程数量控制方法,但是通过 GCD 的 semaphore 功能一样可以达到控制线程数量的效果。...GCD 的 dispatch_group_t 功能可以将多个任务分组,等待分组里面的所有任务执行完成之后,GCD 的 dispatch_group_notify 方法可以通知。...No.1:NSOperation简介 NSOperation是基于GCD之上的更高一层封装,NSOperation需要配合NSOperationQueue来实现多线程。
, GCD会自动利用更多的 CPU 内核(比如双核、四核)来开启线程执行任务,GCD 会自动管理线程的生命周期(创建线程、调度任务、销毁线程),不需要我们程序员手动管理内存。...任务和队列 任务:在同步函数和异步函数中执行 队列:用来存放任务(并发 串行) GCD会自动将队列中的任务取出,放到对应的线程,任务的取出遵循FIFO,即先入先出队列,First Input First...定时器 GCD定时器不受Mode影响因此比NSTimer要准确 static int count = 0; dispatch_after(dispatch_time(DISPATCH_TIME_NOW,...就该讲讲 NSOperation,它是 GCD 的面向对象的封装,使用起来也更方便, NSOperation实现多线程 NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类 NSInvocationOperation...NSBlockOperation 自定义子类继承NSOperation,实现内部相应的方法 使用 NSOperation 实现多线程的步骤: 创建任务 NSOperation 对象 创建 NSOperationQueue
一、NSOperation NSOperation是苹果公司对GCD的封装,完全面向对象,但是比GCD拥有更强的可控性和代码可读性。所以使用起来更好理解。...1、非并发的operation 对于一个非并发的operation,我们需要做的就只是执行main方法中的任务以及能够正常响应取消事件就可以了,其它的复杂工作比如依赖配置、KVO 通知等NSOperation...Paste_Image.png 2、正确响应取消事件 当一个operation开始执行后,它会一直执行它的任务直到完成或被取消为止。...一个NSOperation对象可以通过调用start方法来执行任务,但是默认是同步执行的。 ?...不过暂停一个queue不会导致正在执行的operation在任务中途暂停,只是简单地阻止调度新Operation执行。你可以在响应用户请求时,暂停一个queue来暂停等待中的任务。
于是,Modern Objective-C开发者有两个选择:GCD和NSOperation. 由于GCD已经发展的比较主流了,我们稍后再说它,先说说面向对象的NSOperation....非常适合使用NSOperation的任务例子包括network requests, 图片的缩放,语言处理或者其他一些重复的、结构化的以及需要运行较长时间来处理数据的任务。...依赖 Dependencies 取决于你的App的复杂性,可能会需要把一个大的任务分成多个子任务,这时NSOperation依赖就排上用场了。...相对于GCD非常适用于in-line的异步处理,NSOperation提供了更综合的、面向对象的计算模型,非常适用于封装结构化的数据,重复性的任务。...这是第8个tip,大部分的内容我是第一次知道,非常值得看,而且如果有条件的话,建议下载HD版本的视频来看,效果比SD好太多。
NSOperation&NSOperationQueue NSOperation 是苹果公司对 GCD 的封装,NSOperation 只是一个抽象类,不能用于封装任务, 所以需要用它的子类NSInvocationOperation...可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。...GCD Grand Central Dispatch (GCD),它是为苹果多核的并行运算提出的解决方案,所以会自动合理的利用更多的CPU内核,更重要的是它会自动的管理线程的生命周期(创建线程,调度任务...在开始使用GCD的时候,需要搞清楚任务和队列这两个概念。...NSOperation是对GCD面向对象的ObjC封装,但是相比GCD基于C语言开发,效率却更高,建议如果任务之间有依赖关系或者想要监听任务完成状态的情况下优先选择NSOperation否则使用GCD.
NSOperation 初识 1.1 NSOperation 介绍 1.2 NSOperation 与 GCD 的区别 1.3 NSOperation 与 NSOperationQueue...NSOperation 初识 1.1 NSOperation 介绍 NSOperation 是 OC 语言中基于 GCD 的面向对象的封装; 提供了一些用 GCD 不好实现的功能; 线程的生命周期由系统自动管理...1.2 NSOperation 与 GCD 的区别 多线程方案 区别 GCD GCD 是 iOS4.0 推出的,主要针对多核 CPU 做了优化,是 C 语言的技术;GCD 是将任务(block)添加到队列...(串行/并发/全局/主队列),并且以同步/异步的方式执行任务的函数;GCD 提供了一些 NSOperation 不具备的功能: ① 队列组 ② 一次性执行 ③ 延迟执行 NSOperation NSOperation...NSOperation 与 GCD 区别: GCD 会自动重用线程,而 NSOperation 不会,会一直开线程。 而开太多线程反而会影响效率,我们需要自己控制,一般开 3-6 个。
CPU内核(比如双核、四核) GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.1 任务和队列 GCD中有2...GCD会自动将队列中的任务取出,放到对应的线程中执行 任务的取出遵循队列的FIFO原则:先进先出,后进后出 3.2 GCD的创建 队列的创建 // 第一个参数const char *label :...异步函数不会阻塞当前线程 注意:GCD中开多少条线程是由系统根据CUP繁忙程度决定的,如果任务很多,GCD会开启适当的子线程,并不会让所有任务同时执行。...NSOperation的使用(重点) NSOperation 是苹果公司对 GCD 的封装,完全面向对象,并比GCD多了一些更简单实用的功能,所以使用起来更加方便易于理解。...NSOperation 和NSOperationQueue 分别对应 GCD 的 任务 和 队列。
GCD 负责创建所需的线程,并安排任务在这些线程上运行。由于线程管理现在是系统的一部分,GCD 提供了任务管理和执行的整体方法,比传统线程提供了更高的效率。...iOS 2.0 推出的,苹果推出 GCD 之后,对 NSOperation 的底层进行了全部重写。...比如:提交了 #1,#2,#3 任务到并发队列,开始的顺序是 #1,#2,#3。#2 和 #3 虽然开始的比 #1 晚,但是可能比 #1 执行结束的还要早。...虽然队列在执行小任务时比原始线程更有效,但是创建块并在队列上执行它们仍然存在开销。如果一个块执行的工作量太少,那么内联执行它可能比将它分派到队列中要便宜得多。...NSOperation 是基于 GCD 做的面向对象的封装。相比较 GCD 使用更加简单,并且提供了一些用 GCD 不是很好实现的功能。是苹果公司推荐使用的并发技术。
一、简介 NSOperation 的作用 NSOperation 是对 GCD 的一层封装,更加面向对象。...同时执行的任务数,比如,同时开 3 个线程执行 3 个任务,并发数就是 3 最大并发数的相关方法 -(NSInteger)maxConcurrentOperationCount; -(void)setMaxConcurrentOperationCount...方法取消单个操作 暂停和恢复队列 -(void)setSuspended:(BOOL)b;// YES 代表暂停队列,NO 代表恢复队列 -(BOOL)isSuspended; 6.GCD的队列类型...(NSOperation),都会放到主线程中执行 非主队列(其他队列) [[NSOperationQueue alloc] init] 同时包含了:串行、并发功能 添加到这种队列中的任务(NSOperation...自定义 NSOperation 的步骤很简单,重写 -(void)main 方法,里面实现想执行的任务 重写 -(void)main 方法的注意点 自己创建自动释放池(因为如果是异步操作,无法访问主线程的自动释放池
2.0阅读笔记 这篇文章你将看到以下内容: Efficetive Objective-C 2.0阅读笔记一些有价值的建议 ---- 1.对象内部尽量直接访问实例变量 直接访问实例变量为直接访问内存,效率比调用属性高...执行异步任务的方法不应再-dealloc里调用;只能子啊正常状态下执行的那些方法也不应在-dealloc里调用,因为此时对象已处于正在回收的状态了。...若想实现同步机制,可以以并行队列、同步任务及栅栏实现,代码如下: _syncQueue = dispatch_queue_create("com.syncQ.Wicky", DISPATCH_QUEUE_CONCURRENT...如果想要添加延时任务,条件允许的情况下应尽可能选择GCD。 ---- 9.合理使用GCD与NSOperation GCD为纯C的API,而NSOperation则是OC对象。...与NSOperation比起来GCD更加轻量,然而NSOperation却有以下几点在使用上更加便捷: 取消操作 指定依赖关系 提供KVO监听 指定优先级 重用对象 ---- 10.多用Block枚举,
一、NSOperation 抽象类 NSOperation 是一个"抽象类",不能直接使用。抽象类的用处是定义子类共有的属性和方法。 NSOperation 是基于 GCD 做的面向对象的封装。...NSOperationQueue 队列 已经学习过的抽象类 UIGestureRecognizer CAAnimation CAPropertyAnimation 二、 NSOperation 和 GCD...的核心概念 GCD的核心概念:将 任务(block) 添加到队列,并且指定执行任务的函数。...三、NSOperation 和 GCD的区别: GCD 将任务(block)添加到队列(串行/并发/主队列),并且指定任务执行的函数(同步/异步) GCD是底层的C语言构成的API iOS 4.0 推出的...OC 框架,更加面向对象,是对 GCD 的封装。 iOS 2.0 推出的,苹果推出 GCD 之后,对 NSOperation 的底层全部重写。
1、NSoperation是基于GCD封装的 dispatch_async(_Queue, ^{ //请求数据 NSData *data = [NSData dataWithContentURL...2、NSOperationQueue相对于GCD来说有以下优点: 提供了在 GCD 中不那么容易复制的有用特性。...可以很方便的取消一个NSOperation的执行 可以更容易的添加任务的依赖关系 提供了任务的状态:isExecuteing, isFinished....在两种类型中,这些队列所处理的任务都使用 NSOperation 的子类来表述。...3、用法 NSOperation实现 一个是直接使用NSInvocationOperation、NSBlockOperation两个子类,一个是自己实现NSOperation的子类 NSInvocationOperation
实际上 NSOperation、NSOperationQueue 是基于 GCD 更高一层的封装,完全面向对象。但是比 GCD 更简单易用、代码可读性也更高。...NSOperation、NSOperationQueue 操作和操作队列 既然是基于 GCD 的更高一层的封装。...那么,GCD 中的一些概念同样适用于 NSOperation、NSOperationQueue。...在 NSOperation、NSOperationQueue 中也有类似的任务(操作)和队列(操作队列)的概念。...这样看来,是不是比 GCD 还要简单了许多? 6. NSOperation 操作依赖 NSOperation、NSOperationQueue 最吸引人的地方是它能添加操作之间的依赖关系。
其实 NSOpertion 是先于GCD引进的,在当时,NSOperationQueue 接收 NSOperation 对象并创建一个线程,然后在该线程上运行 main方法 ,运行完成之后再杀死该线程。...OperationState 使用 对于一般的任务,我们可以直接使用BlockOperation。...,main方法中进行任务的处理,所以重写的main方法。...在一定条件下可以类比到 GCD 的信号量 在不同的任务之间建立依赖关系addOperation;在一定条件下可以类比到 GCD 的 DispatchWorkItem的public func notify...NSOperation vs.
在项目什么时候选择使用GCD,什么时候选择NSOperation 答: 项目中使用NSOperation的优点是NSOperation是对线程的高度抽象,在项目中使用它,会使项目的程序结构更好,子类化NSOperation...NSOperation 相比于 GCD 有哪些优势?** GCD是基于c的底层api,NSOperation属于object-c类。...ios 首先引入的是NSOperation,IOS4之后引入了GCD和NSOperationQueue并且其内部是用gcd实现的。...相对于GCD: 1、NSOperation拥有更多的函数可用,具体查看api。 2、在NSOperationQueue中,可以建立各个NSOperation之间的依赖关系。...4、NSOperationQueue可以方便的管理并发、NSOperation之间的优先级。 GCD主要与block结合使用。代码简洁高效。
16.请简单对比下GCD和NSOperation两种多线程的实现方案? 17.请按照自己的理解,说一说在进行多线程编程的时候相对于GCD而言,操作队列有哪些优势?...3.请简单说明在iOS开发中有哪些多线程的实现方案? PThread NSThread GCD NSOperation 4.请简单说明主线程的作用,以及使用注意点?...在GCD中,任务用块(block)来表示,而块是个轻量级的数据结构;相反操作队列中的『操作』NSOperation则是个更加重量级的Object-C对象。...具体该使用GCD还是使用NSOperation需要看具体的情况,如果只是想简单开一个子线程执行任务推荐使用GCD,如果有很多任务需要开多个子线程下载推荐使用操作队列 17.请按照自己的理解,说一说在进行多线程编程的时候相对于...GCD而言,操作队列有哪些优势?
领取专属 10元无门槛券
手把手带您无忧上云