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 ...
随机推荐
- 洛谷P4302 [SCOI]字符串折叠 [字符串,区间DP]
题目传送门 字符串折叠 题目描述 折叠的定义如下: 一个字符串可以看成它自身的折叠.记作S = S X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S) = SSSS…S(X个S). 如 ...
- Linux添加或修改ssh端口
1) 查看ssh服务是否安装齐全 这里使用”rpm –qa|grep ssh”命令查看. [root@xuexi ~]# rpm -qa | grep ssh libssh2-1.4.3-10.el ...
- vijos1889:天真的因数分解
题目链接 vijos1889:天真的因数分解 题解 同bzoj2440: [中山市选2011]完全平方数 就是改成了求有平方因子数,依旧考虑二分,只是把容斥系数取一下相反数,也就是把莫比乌斯函数求一个 ...
- Topcoder Srm 671 Div2 1000 BearDestroysDiv2
\(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...
- [BZOJ 1500] 维护序列
Link: BZOJ 1500 传送门 Solution: 可能平衡树维护序列的所有操作都在这了吧…… 对序列的维护$fhq treap$和$Splay$都能做 有几个注意点: 1.维护序列时始终记得 ...
- 【构造】AtCoder Regular Contest 079 F - Namori Grundy
对每个点的取值都取最小的可能值. 那个图最多一个环,非环的点的取值很容易唯一确定. 对于环上的点v,其最小可能取值要么是mex{c1,c2,...,ck}(ci这些是v直接相连的非环点)(mex是). ...
- 【分块】【树套树】bzoj2141 排队
考虑暴力更新的情况,设swap的是L,R位置的数.swap之后的逆序对数应该等于:之前的逆序对数+[L+1,R-1]中比 L位置的数 大的数的个数-[L+1,R-1]中比 L位置的数 小的数的个数-[ ...
- Educational Codeforces Round 8 B. New Skateboard 暴力
B. New Skateboard 题目连接: http://www.codeforces.com/contest/628/problem/A Description Max wants to buy ...
- Process.Start() 传递参数中有空格问题
项目-> (工程名)属性-> 调试-> 命令行参数 1.在命令行下执行 参数之间用空格分隔开就可以了,如果参数有空格,以双引号风格 Test aa "bb ...
- centOS 7设置静态IP,使用Xshell远程连接
背景 在正式生产环境中,通常需要使用Xshell等终端软件,通过固定IP地址远程连接生产服务器进行管理,所以需要给生产服务器分配一个静态的IP地址,以方便本地计算机远程连接. 目的 本文目的在于模仿生 ...