一: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的使用的更多相关文章

  1. iOS多线程之NSOperation,NSOperationQueue

    使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBlockOperation. 另一种是继承NSOperation 如果你也 ...

  2. [转] iOS多线程编程之NSOperation和NSOperationQueue的使用

    <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是用定义好 ...

  3. iOS多线程编程之NSOperation和NSOperationQueue的使用

    前一篇 <iOS多线程编程之NSThread的使用> 介绍三种多线程编程和NSThread的使用,这篇介绍NSOperation的使用. 使用 NSOperation的方式有两种, 一种是 ...

  4. iOS多线程之NSOperation详解

    使用NSOperation和NSOperationQueue进行多线程开发,只要将一个NSOperation(实际开发中需要使用其子类 NSInvocationOperation,NSBlockOpe ...

  5. iOS 多线程之NSOperation篇举例详解

    这篇博客是接着总篇iOS GCD NSOperation NSThread等多线程各种举例详解写的一个支篇.总篇也包含了此文的链接.本文讲解的知识点有NSBlockOperationClick,队列, ...

  6. 多线程之NSOperation和NSOperationQueue

    这篇文章里我将不过多的谈及理论知识,这些东西会的自然会,不会的,看多了也是云里雾里.下面我讲更多的用代码+注释的方式来讲如何使用NSOperation和NSOperationQueue. 1.NSOp ...

  7. IOS多线程之NSOperation学习总结

    NSOperation简介 1.NSOperation的作用 配合使用NSOperation和NSOperationQueue也能实现多线程编程 2.NSOperation和NSOperationQu ...

  8. 【原】iOS多线程之NSThread、NSOperationQueue、NSObject和GCD的区别

    区别: Thread: 是这几种方式里面相对轻量级的,但也是使用起来最负责的,你需要自己管理thread的生命周期,线程之间的同步.线程共享同一应用程序的部分内存空间, 它们拥有对数据相同的访问权限. ...

  9. iOS多线程编程之NSOperation和NSOperationQueue的使用(转自容芳志专栏)

    转自由http://blog.csdn.net/totogo2010/ 使用 NSOperation的方式有两种, 一种是用定义好的两个子类: NSInvocationOperation 和 NSBl ...

随机推荐

  1. HDU 4348.To the moon SPOJ - TTM To the moon -可持久化线段树(带修改在线区间更新(增减)、区间求和、查询历史版本、回退到历史版本、延时标记不下放(空间优化))

    To the moon Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  2. CodeForces 779A Pupils Redistribution

    简单题. 因为需要连边的人的个数一样,又要保证和一样,所以必须每个数字的个数都是一样的. #include<map> #include<set> #include<cti ...

  3. Codeforces Round #407 (Div. 2) D. Weird journey(欧拉路)

    D. Weird journey time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  4. jquery checkbox用法汇总

    来源:http://www.jb51.net/article/75717.htm 1.全选 ? 1 2 3 $("#btn1").click(function(){ $(" ...

  5. 【BZOJ 1115】【POI 2009】石子游戏Kam

    http://www.lydsy.com/JudgeOnline/problem.php?id=1115 差分后变成阶梯博弈. #include<cstdio> #include<c ...

  6. 【树形dp】TELE

    [POJ1155]TELE Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5376   Accepted: 2973 Des ...

  7. 【强连通分量缩点】【DFS】【动态规划】Urozero Autumn Training Camp 2016 Day 5: NWERC-2016 Problem B. British Menu

    有向图,不经过重复点的最长链,强连通分量大小不超过5. 每个强连通分量内部暴力预处理任意两对点之间的最长路,外面DAG上dp. 不是很好写,但是预处理完了之后,可以重构每个强连通分量内部的结构,然后整 ...

  8. jquer总结

    前端jq总结 选择器********************************************************************** 1,基本选择 器 #id .clss ...

  9. Objective-C字面量语法总结

    通常情况下,创建数组,字典的时候需要写一些很长的方法名,今天就总结一下如何使用字面量语法代替这些方法. 1.数值的创建 NSNumber *number1 = [NSNumber numberWith ...

  10. 容器set和multiset

    一.set和multiset基础 set和multiset会根据特定的排序准则,自动将元素进行排序.不同的是后者允许元素重复而前者不允许. 需要包含头文件: #include <set> ...