首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

多线程-NSOperation和NSOperationQueue

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 ** 任务之间有依赖、或者要监听任务的执行情况

1.2K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    iOS多线程——你要知道的NSOperation都在这里你要知道的iOS多线程NSThread、GCD、NSOperation、RunLoop都在这里

    封装更完善的GCD,GCD提供了极其便捷的方法来编写多线程程序,可以自动实现多核的真正并行计算,自动管理线程的生命周期,好处不言而喻,但可定制性就有点不足了,Foundation框架提供了NSOperation...和NSOperationQueue这一面向对象的多线程类,这两个类与GCD提供的功能类似,NSOperation提供任务的封装,NSOperationQueue顾名思义,提供执行队列,可以自动实现多核并行计算...NSOperation “任务的封装” 和GCD类似,GCD向队列提交任务,NSOperation就是对任务进行的封装,封装好的任务交给不同的NSOperationQueue即可进行串行队列的执行或并发队列的执行...NSOperationQueue NSOperationQueue就是任务的执行队列,看一下该类中有哪些比较重要的属性和方法: //向队列中添加一个任务 - (void)addOperation:(NSOperation...的源码时可以发现,这些库中大量用了NSOperation和NSOperationQueue,当然也用了GCD,比如SDWebImage下载图片的任务是自定义的NSOperation子类SDWebImageDownloaderOperation

    1.6K51

    iOS学习——(转)多线程

    三、多线程的四种解决方案   多线程的四种解决方案分别是: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来实现多线程。

    1.2K20

    推荐:多线程的实现方式及经典示例

    , 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

    1.2K160

    iOS多线程之四:NSOperation的使用

    一、NSOperation NSOperation是苹果公司对GCD的封装,完全面向对象,但是比GCD拥有更强的可控性和代码可读性。所以使用起来更好理解。...1、非并发的operation 对于一个非并发的operation,我们需要做的就只是执行main方法中的任务以及能够正常响应取消事件就可以了,其它的复杂工作比如依赖配置、KVO 通知等NSOperation...Paste_Image.png 2、正确响应取消事件 当一个operation开始执行后,它会一直执行它的任务直到完成或被取消为止。...一个NSOperation对象可以通过调用start方法来执行任务,但是默认是同步执行的。 ?...不过暂停一个queue不会导致正在执行的operation在任务中途暂停,只是简单地阻止调度新Operation执行。你可以在响应用户请求时,暂停一个queue来暂停等待中的任务。

    1.1K30

    NSOperation

    于是,Modern Objective-C开发者有两个选择:GCD和NSOperation. 由于GCD已经发展的比较主流了,我们稍后再说它,先说说面向对象的NSOperation....非常适合使用NSOperation的任务例子包括network requests, 图片的缩放,语言处理或者其他一些重复的、结构化的以及需要运行较长时间来处理数据的任务。...依赖 Dependencies 取决于你的App的复杂性,可能会需要把一个大的任务分成多个子任务,这时NSOperation依赖就排上用场了。...相对于GCD非常适用于in-line的异步处理,NSOperation提供了更综合的、面向对象的计算模型,非常适用于封装结构化的数据,重复性的任务。...这是第8个tip,大部分的内容我是第一次知道,非常值得看,而且如果有条件的话,建议下载HD版本的视频来看,效果比SD好太多。

    37120

    iOS多线程NSThread,NSOperation和GCD详解

    NSOperation&NSOperationQueue NSOperation 是苹果公司对 GCD 的封装,NSOperation 只是一个抽象类,不能用于封装任务, 所以需要用它的子类NSInvocationOperation...可以看到 NSOperation 和 NSOperationQueue 分别对应 GCD 的 任务 和 队列 。...GCD Grand Central Dispatch (GCD),它是为苹果多核的并行运算提出的解决方案,所以会自动合理的利用更多的CPU内核,更重要的是它会自动的管理线程的生命周期(创建线程,调度任务...在开始使用GCD的时候,需要搞清楚任务和队列这两个概念。...NSOperation是对GCD面向对象的ObjC封装,但是相比GCD基于C语言开发,效率却更高,建议如果任务之间有依赖关系或者想要监听任务完成状态的情况下优先选择NSOperation否则使用GCD.

    80120

    iOS - 多线程(四):NSOperation

    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 个。

    1.7K10

    iOS-多线程详解

    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 的 任务 和 队列。

    2.1K90

    iOS多线程之GCD、OperationQueue 对比和实践记录

    GCD 负责创建所需的线程,并安排任务在这些线程上运行。由于线程管理现在是系统的一部分,GCD 提供了任务管理和执行的整体方法,比传统线程提供了更高的效率。...iOS 2.0 推出的,苹果推出 GCD 之后,对 NSOperation 的底层进行了全部重写。...比如:提交了 #1,#2,#3 任务到并发队列,开始的顺序是 #1,#2,#3。#2 和 #3 虽然开始的比 #1 晚,但是可能比 #1 执行结束的还要早。...虽然队列在执行小任务时比原始线程更有效,但是创建块并在队列上执行它们仍然存在开销。如果一个块执行的工作量太少,那么内联执行它可能比将它分派到队列中要便宜得多。...NSOperation 是基于 GCD 做的面向对象的封装。相比较 GCD 使用更加简单,并且提供了一些用 GCD 不是很好实现的功能。是苹果公司推荐使用的并发技术。

    1.6K40

    iOS 多线程 - NSOperation

    一、简介 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 方法的注意点 自己创建自动释放池(因为如果是异步操作,无法访问主线程的自动释放池

    40610

    老司机读书笔记——Effective Objective-C 2.0阅读笔记

    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枚举,

    47220

    多线程之NSOperation小结

    一、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 的底层全部重写。

    46520

    iOS基础问答面试题连载(三)-附答案

    16.请简单对比下GCD和NSOperation两种多线程的实现方案? 17.请按照自己的理解,说一说在进行多线程编程的时候相对于GCD而言,操作队列有哪些优势?...3.请简单说明在iOS开发中有哪些多线程的实现方案? PThread NSThread GCD NSOperation 4.请简单说明主线程的作用,以及使用注意点?...在GCD中,任务用块(block)来表示,而块是个轻量级的数据结构;相反操作队列中的『操作』NSOperation则是个更加重量级的Object-C对象。...具体该使用GCD还是使用NSOperation需要看具体的情况,如果只是想简单开一个子线程执行任务推荐使用GCD,如果有很多任务需要开多个子线程下载推荐使用操作队列 17.请按照自己的理解,说一说在进行多线程编程的时候相对于...GCD而言,操作队列有哪些优势?

    86350
    领券