一: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. 洛谷P2713 罗马游戏

    题目传送门 分析: 好吧,其实没什么好分析的,左偏树裸题. Code: #include<cstdio> #include<cstring> #include<cstdl ...

  2. org.xml.sax.SAXParseException; lineNumber: 14; columnNumber: 32; 元素类型为 "key" 的内容必须匹配 "(column)*"

    报错:部分错误信息,主要查看CauseBy Caused by: org.hibernate.InvalidMappingException: Unable to read XML at org.hi ...

  3. Flask实战第37天:服务器权限验证

    完成服务器权限验证之前,我们先如下页面先补上 帖子管理 {% extends 'cms/cms_base.html' %} {% block title %} 帖子管理-CMS管理系统 {% endb ...

  4. 【2-SAT(tarjan)】BZOJ1997-[Hnoi2010]Planar

    [题目大意]给出一张存在哈密顿回路的无向图,判断是否是平面图.[思路]首先平面图的一个性质:边数<=点数*3-6因为存在哈密顿回路,可以将回路看作是一个圆,考量不再哈密顿回路中的边.如果两天边相 ...

  5. Springcloud中的region和zone的使用

    一.背景 用户量比较大或者用户地理位置分布范围很广的项目,一般都会有多个机房.这个时候如果上线springCloud服务的话,我们希望一个机房内的服务优先调用同一个机房内的服务 ,当同一个机房的服务不 ...

  6. JAVA EE 项目常用知识 之AJAX技术实现select下拉列表联动的两种用法(让你真正理解ajax)

    ajax 下拉列表联动的用法. ajax的定义: AJAX 是一种用于创建快速动态网页的技术. 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的 ...

  7. ES6 函数参数的默认值

    基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采取变通的方法. function log(x,y){ y = y||'world'; console.log(x,y); } log('k ...

  8. 你一定喜欢看的 Webpack 2.× 入门实战(转载)

    最近在学习 Webpack,网上大多数入门教程都是基于 Webpack 1.x 版本的,我学习 Webpack 的时候是看了 zhangwang 的 <<入门 Webpack,看这篇就够了 ...

  9. [转]详解spring 每个jar的作用

    spring.jar 是包含有完整发布模块的单个jar 包.但是不包括mock.jar, aspects.jar, spring-portlet.jar, and spring-hibernate2. ...

  10. php应用数据库连接中的单例模式

    所谓的单例模式简而言之就是某个类在运行过程中只有一个实例,并且能够自行实例化并为整个系统的运行提供这个实例.在数据库连接中使用单例模式实例化数据库连接对象主要是可以避免重复的实例化对象而造成资源的浪费 ...