NSOperation的使用

NSOperation和GCD是一样的,也是苹果提供给我们的一套多线程解决方案。实际上它也是基于GCD开发的,但是比GCD拥有更强的可控性和代码可读性。

NSOperation是一个抽象的基类,表示一个独立的计算单元,可以为子类提供有用且线程安全的建立状态,优先级,依赖和取消等操作。

使用NSOperation有两种方式:

①使用系统已经封装好的NSBlockOperation和NSInvocationOperation这两个实体类;

②继承NSOperation,定制自己的操作。

时间: 2024-08-03 23:16:59

NSOperation的使用的相关文章

多线程之-NSOperation

多线程之-NSOperation NSOperation是个抽象类,并不具备封装操作的能力,必须使用它的子类 NSInvocationOperation 如果直接执行NSInvocationOperation中的操作, 那么默认会在主线程中执行 // 创建队列 NSOperationQueue *queue = [[NSOperationQueue alloc] init]; // 创建操作 NSInvocationOperation *operation = [[NSInvocationOpe

IOS中的多线程【二】— NSOperation和NSOperationQueue

NSOperationQueue是一套基于Objective-c语言的API. GCD与NSOperationQueue的优缺点: NSOperationQueue:比较安全 GCD:没有NSOperationQueue安全,但使用起来简单,快速,还提供了一些操控底层的方法.实际开发中还是以GCD为主. NSOperationQueue实现多线程流程 1.定义一个任务队列. 2.定义一个任务. 3.把任务添加到队列中.一旦任务被添加到队列中,任务会马上被调度执行. 任务队列(NSOperatio

iOS开发NSOperation 三:操作依赖和监听以及线程间通信

一:操作依赖和监听 #import "ViewController.h" @interface ViewController () @end @implementation ViewController /** * 1:NSOperation的使用:1:先创建队列NSOperationQueue:若不创建队列直接封装任务则默认在当前线程中串行执行任务,其队列分为两种主队列和非主队列,主队列和GCD中的主队列一样[NSOperationQueue mainQueue],而alloc in

线程2 NSOperation 抽像类的使用

// // ZYOperationViewController.h // Thread // // Created by yejiong on 14 // // ZYOperation.h // Thread // // Created by yejiong on 14/11/4. // Copyright © 2014年 zzz. All rights reserved. // #import <Foundation/Foundation.h> @interface ZYOperation

iOS中用GCD和NSOperation多个异步操作的关联

在iOS实际开发中,我们可能会遇到下面的场景:有以下四个操作A,B,C,D.要求A,B,C在子线程中执行,当A,B,C执行完毕之后回到主线程执行操作D,ABC之间可能会有相互依赖的关系,我们可以通过GCD和NSOperation都可以实现这样的需求. 1.GCD // 用GCD - (void)useGCD { // 1.1可以创建一个全局并发队列,A,B,C操作会在子线程中并发执行,ABC不存在先后执行顺序 // dispatch_queue_t quque=dispatch_get_glob

GCD和NSOperation 的概念,用法及之间的区别

CGD与NSOperation的区别 gcd是基于c的底层api,NSOperation属于object-c类.相对于gcd:1,NSOperation拥有更多的函数可用,具体查看api.2,在NSOperationQueue中,可以建立各个NSOperation之间的依赖关系.3,有kvo,可以监测operation是否正在执行(isExecuted).是否结束(isFinished),是否取消(isCanceld).4,NSOperationQueue可以方便的管理并发.NSOperatio

step 7 NSOperation(高级/GCD对比)

高级演练 全局队列 /// 全局操作队列,统一管理所有的异步操作 @property (nonatomic, strong) NSOperationQueue *queue; - (NSOperationQueue *)queue { if (_queue == nil) { _queue = [[NSOperationQueue alloc] init]; } return _queue; } 最大并发操作数 /// MARK: - 最大并发操作数 - (void)opDemo1 { // 设

iOS开发-NSOperation与GCD区别

Mac OS X 10.6及iOS4.0之后导入了可以使全体线程更高效运行,并且使并行处理应用更易开发的架构,GCD(Grand Central  Dispatch),同时引入的还有Run Loop,线程(包括Cocoa和POSIX)和Operation.GCD拥有非常轻量级的工作单元和并发方式,并且由系统决定其最佳调度方式.这个时候出现了一个问题,NSOperation如何处理呢? 其实我们在通过NSOperation和GCD进行开发过程中,会发现两者执行的方式有许多相似之处,NSOperat

多线程----NSOperation

NSOperation是Cocoa中的一个抽象类,用来封装单个任务和代码执行一项操作,由于是抽象类,所以不能直接实例化使用,必须定义子类继承该抽象类来实现, 使用NSOperation的方式有两种: 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation,有相关的使用方法. NSOperation的子类NSInvocationOperation提供了一套简单的多线程编程方法,是IOS多线程编程中最简单的一种实现方式. 另一种是继承NSOper

NSOperation开启线程情况分析

如果NSOperation中只有一个任务,且调用start方法不会开启线程,start默认在当前线程执行. 如果NSOperation中只有一个任务,添加到队列当中会开启线程,如果是主队列则不会开启新的线程 一个NSOperation中添加了多个任务,且调用start方法,开启新的线程. 多个NSOperation,且每个NSOperation中只有一个任务,且每个NSOperation调用start方法 ,不会开启新的线程. 多个任务,添加到一个队列当中, 多个任务添加到主队列