iOS多线程之NSOperation和NSOperationQueue的使用
一:NSOperation 两个子类+重写main方法
- NSInvocationOperation
- NSBlockOperation 有个类方法 BlockOprationWith:
- 还有就是自己个子类重写main方法,把任务写在main方法里面
二:NSOperationQueue 线程管理器
- 类方法 mainQueue
- 类方法 currentQueue
- alloc init 新Queue
三:使用代码:(ARC环境)
#pragma mark NSOperationQueue - (void)doBtnFoure
{
//一:主线程测试;
//NSOperationQueue *mainQueue = [NSOperationQueue mainQueue]; //主线种之中添加任务;卡UI
//测试一;
// [mainQueue addOperationWithBlock:^{
// [self doOperation:@"NSOperationQueue MainQueue"];
// }]; //测试2;
// [mainQueue addOperation:[NSBlockOperation blockOperationWithBlock:^{
// [self doOperation:@"MainQueue add BlockOperation"];
// }]]; //二:创建Quene,其他线程处理;不卡UI; 默认并行,异步执行;
NSOperationQueue *myQueue = [[NSOperationQueue alloc]init];
myQueue.maxConcurrentOperationCount = ; //设置并行操作线程的最大个数;
[myQueue addOperationWithBlock:^{
[self doOperation:@"MyQueue "];
}]; [myQueue addOperation:[NSBlockOperation blockOperationWithBlock:^{
[self doOperation:@"MyQueue NSBlockOperation"];
}]]; NSInvocationOperation *invoOp = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doOperation:) object:@"MyQueue NSInvocationOp"];
[myQueue addOperation:invoOp]; } #pragma mark 自定的 MyOperation - (void)doBtnThree
{
// 串行执行任务,卡UI 在 当前线程执行;
MyOperation *myOperation = [[MyOperation alloc]init];
[myOperation start]; MyOperation *op2 = [[MyOperation alloc]init];
[op2 start];
} #pragma mark 只有将operation放到一个NSOperationQueue中,才会异步执行操作
// - (void)doBtnTwo
{
//卡UI,在当前线程之中执行;同步,串行执行多个NSBlockOp,并行执行NSOp里面的 ExecuBlock;
//每个ExecuBlock都是一个新的线程;
NSBlockOperation *blockOp = [[NSBlockOperation alloc]init];
[blockOp addExecutionBlock:^{
[self doOperation:@"NSBlockOperation1 1111"];
}];
[blockOp addExecutionBlock:^{
[self doOperation:@"NSBlockOperation1 2222"];
}]; [blockOp start]; /* 线程执行完的操作;
blockOp.completionBlock = ^(){
NSLog(@"执行完成");
};
*/ NSBlockOperation *blockOp2 = [[NSBlockOperation alloc]init];
[blockOp2 addExecutionBlock:^{
[self doOperation:@"NSBlockOperation2 1111"]; }];
[blockOp2 addExecutionBlock:^{
[self doOperation:@"NSBlockOperation2 2222"]; }]; [blockOp2 start]; } - (void)doBtnOne
{
//在当前线程中执行,卡UI ;同步,串行;
NSInvocationOperation *oper1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doOperation:) object:@"NSINvocationOperation 111"];
NSInvocationOperation *oper2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(doOperation:) object:@"NSINvocationOperation 222"];
[oper1 start];
[oper2 start];
} //任务测试 - (void)doOperation:(NSString *)aStr
{
for (int i = ; i < ; i ++) {
NSLog(@"%@ --> %d",aStr,i);
}
}
iOS多线程之NSOperation和NSOperationQueue的使用的更多相关文章
- iOS多线程之NSOperation,NSOperationQueue
使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...
- [转] iOS多线程编程之NSOperation和NSOperationQueue的使用
<iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是用定义好 ...
- iOS多线程编程之NSOperation和NSOperationQueue的使用
前一篇 <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是 ...
- iOS多线程之NSOperation详解
使用NSOperation和NSOperationQueue进行多线程开发,只要将一个NSOperation(实际开发中需要使用其子类 NSInvocationOperation,NSBlockOpe ...
- iOS 多线程之NSOperation篇举例详解
这篇博客是接着总篇iOS GCD NSOperation NSThread等多线程各种举例详解写的一个支篇.总篇也包含了此文的链接.本文讲解的知识点有NSBlockOperationClick,队列, ...
- 多线程之NSOperation和NSOperationQueue
这篇文章里我将不过多的谈及理论知识,这些东西会的自然会,不会的,看多了也是云里雾里.下面我讲更多的用代码+注释的方式来讲如何使用NSOperation和NSOperationQueue. 1.NSOp ...
- IOS多线程之NSOperation学习总结
NSOperation简介 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQu ...
- 【原】iOS多线程之NSThread、NSOperationQueue、NSObject和GCD的区别
区别: Thread: 是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限. ...
- iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)
转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBl ...
随机推荐
- POJ 2031 Building a Space Station【最小生成树+简单计算几何】
You are a member of the space station engineering team, and are assigned a task in the construction ...
- 按照grouip分组,之后分组调用生成正式凭证 的接口
按照grouip分组,之后分组调用生成正式凭证 的接口 Map<String, List<OperatingLogVO>> resultMap = new HashMap< ...
- Office 2016系列下载地址
版本:Office 2016 Pro Plus 64位文件名:SW_DVD5_Office_Professional_Plus_2016_64Bit_ChnSimp_MLF_X20-42426.ISO ...
- 浮生半日:探究Python字节码
好吧!“人生苦短,请用Python”,作为python爱好者以及安全从业者,而且最近也碰到了一些这方面的问题,懂点python字节码还是很有必要的. Python是一门解释性语言,它的具体工作流程如下 ...
- poj 1018(dp)
Communication System Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 25653 Accepted: ...
- [Codeforces #190] Tutorial
Link: Codeforces #190 传送门 A: 明显答案为$n+m-1$且能构造出来 #include <bits/stdc++.h> using namespace std; ...
- BZOJ 4403 序列统计(Lucas)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4403 [题目大意] 给定三个正整数N.L和R,统计长度在1到N之间, 元素大小都在L到 ...
- 【动态规划】POJ3616-Milking Time
[题目大意] 奶牛Bessie在0~N时间段产奶.农夫约翰有M个时间段可以挤奶,时间段[a,b]Bessie能挤到的牛奶量v.奶牛产奶后需要休息R小时才能继续下一次产奶,求Bessie最大的挤奶量. ...
- 基于socket的udp传输,socketserver模块,进程
基于UDP的套接字 udp是无连接的,先启动哪一端都不会报错 socket.SOCK_DGRAM 数据报协议 udp不会发送空数据,什么都不输入直接发送也会有报头发过去 服务端 import sock ...
- Windows下编译protobuf v3.3.0
一:概述 关于 protobuf 在此不再多说,此处记录下成功编译步骤以备日后查阅.注意:本文并不是使用cmake gui进行编译的,如果熟悉cmake gui的话,也可以使用gui进行生成编译. 二 ...