iOS -NSOperation——高级的并发处理方法
来源:互联网 发布:linux 绝对路径 编辑:程序博客网 时间:2024/06/14 23:06
NSOperation是Objective-C中一种高级的并发处理方法,现在对GCD的封装;功能比GCD更强大!
两个概念
操作;
操作队列;
NSOperation多线程实现步骤
实现多线程的步骤就是,把操作添加到操作队列中。
两个操作:NSInvocationOperation,NSBlockOperation
两个操作队列:主队列、非主队列;
队列:
队列的创建方法:
主队列:
NSOperationQueue *queue = [NSOperationQueuemainQueue];
非主队列:
NSOperationQueue *queue = [[NSOperationQueuealloc]init];
队列添加任务的方法三个
添加单个操作:
- (void)addOperation:(NSOperation *)op;
添加多个操作:
- (void)addOperations:(NSArray<NSOperation *> *)ops waitUntilFinished:(BOOL)waitNS_AVAILABLE(10_6,4_0);
添加block操作:
- (void)addOperationWithBlock:(void (^)(void))blockNS_AVAILABLE(10_6,4_0);
操作:
NSOperation是一个抽象类,也就是说NSOperation本身不具备封装操作的能力,需要使用它的两个子类:
- NSInvocationOperation
- NSBlockOperation
操作:NSInvocationOperation
方式一、NSInvocationOperation +strat方法
1、创建NSInvocationOperation对象
- (id)initWithTarget:(id)target selector:(SEL)selobject:(id)arg;
2、调用start方法开始执行操作
- (void)start;
一旦执行操作,就会调用target的sel方法
注意:默认调用了start方法后并不会开一条新线程去执行操作,而是在当前线程同步情况下,执行操作;
方式二、NSInvocationOperation +主队列;
1、创建NSInvocationOperation对象
- (id)initWithTarget:(id)target selector:(SEL)selobject:(id)arg;
2、创建主队列
NSOperationQueue *queue = [NSOperationQueuemainQueue];
3、添加操作到主队列
- (void)addOperation:(NSOperation *)op;
方式三、NSInvocationOperation +非队列;
1、创建NSInvocationOperation对象
- (id)initWithTarget:(id)target selector:(SEL)selobject:(id)arg;
2、创建非主队列
NSOperationQueue *queue = [[NSOperationQueuealloc]init];
3、添加操作到主队列
- (void)addOperation:(NSOperation *)op;
操作:NSBlockOperation
方式一、NSBlockOperation +主队列
1、创建NSBlockOperation对象
NSBlockOperation *blockOp = [NSBlockOperationblockOperationWithBlock:^{
//任务代码
}];
2、创建非主队列
NSOperationQueue *queue = [NSOperationQueuemainQueue];
3、添加操作到主队列
[queueaddOperation:blockOp];
方式二、NSBlockOperation + 非主队列
1、创建NSBlockOperation对象
NSBlockOperation *blockOp = [NSBlockOperationblockOperationWithBlock:^{
//任务代码
}];
2、创建非主队列
NSOperationQueue *queue = [[NSOperationQueuealloc]init];
3、添加操作到非主队列
[queueaddOperation:blockOp];
追加操作:
- (void)addExecutionBlock:(void (^)(void))block;
NSOperationQueue管理
1、最大并发数(同时执行的任务数)
方法:
最大并发数的相关方法
- (NSInteger)maxConcurrentOperationCount;
- (void)setMaxConcurrentOperationCount:(NSInteger)cnt;
2、队列的取消、暂停、恢复
- 取消队列的所有操作
- (void)cancelAllOperations;
提示:也可以调用NSOperation的- (void)cancel方法取消单个操作
- 暂停和恢复队列
- (void)setSuspended:(BOOL)b;// YES代表暂停队列,NO代表恢复队列
- (BOOL)isSuspended;
3、操作依赖
[operationBaddDependency:operationA];// 操作B依赖于操作A
操做依赖:——线程同步技术
[op2 addDependency op1];
不在同一个操作队列中的操作可以添加依赖!
注意:必须放在 添加操作队列之前;
忌:循环依赖;
自定义NSOperation
将操作添加到队列中的时候,会调用main方法;
- (void)main方法,在里面实现想执行的任务;
自定义NSOperation的时,只需要重写main方法即可;
0 0
- iOS -NSOperation——高级的并发处理方法
- NSOperation的高级功能——线程间通信&最大并发数&挂起&取消全部操作
- iOS并发编程(二)——NSOperation
- ios多线程操作(十一)—— NSOperation的高级操作
- ios多线程操作(十一)—— NSOperation的高级操作
- iOS NSOperation高级使用
- [iOS]NSOperation的start与main,并发与非并发。
- NSOperation的高级功能
- IOS多线程之——NSOperation和NSOperation Queue
- IOS中常见的Operation —— NSOperation
- iOS —— NSThread、NSOperation、GCD多线程的优缺点
- 多线程:NSOperation 的高级功能
- IOS中线程的处理(GCD,NSOperation,NSOperationQueue)
- iOS并发编程(上)-- NSOperation queue
- iOS开发 自定义并发NSOperation实战
- ios 多线程 -- NSOperation 常用方法
- ios多线程开发——nsoperation详解
- iOS开发——多线程NSOperation
- BestCoder #65 1003 ZYB's Premutation
- ectouch 注册会员出错 ,密码找回问题不能为空。
- android SDK体系介绍
- 线性时间Huffman算法
- 谈谈UICollectionView添加头视图的方法
- iOS -NSOperation——高级的并发处理方法
- DNA repair
- BestCoder #65 1004 ZYB'S Tree(树形DP)
- Flag
- 程序 = 核心direct问题 + 子问题的关系、顺序
- 使用spring aop结合log4j做日志
- 1043. Is It a Binary Search Tree (25)【二叉树】——PAT (Advanced Level) Practise
- UESTC 1255 斓少摘苹果 贪心法
- Bone Collector