NSOperation(经常使用):
1、为什么会有NSOperation?
弥补gcd的一些问题:
1)下载为例子:如果gcd放到队列中的block操作面对网络有问题,block之外无法取消block之内操作
2)提供了gcd不能提供很多功能()
 
2、什么是NSOperation?
1. 面向oc的接口;基于gcd的多线程解决方案
2. queue队列的类型:主队列/非主队列
3. 任务执行的方式:同步/异步
 
3、如何使用NSOperation?
1. 无法直接使用NSOperation类
2. 只能使用两个子类:
NSInvocationOperation (了解;几乎都不用)
NSBlockOperation (理解;重点)
执行方式:
1. 同步:
使用NSBlockOperation的addExecutionBlock方法,如果是一个操作会在主线程中做

2. 异步
1) 使用NSBlockOperation的addExecutionBlock方法,如果是多个操作,第一个会在主线程中做;剩余的会在子线程中做
2)将NSBlockOperation加入到非主队列中,会自动启动子线程来执行;但是不确定同一时间会启动多少个线程来执行

 
3. 队列:NSOperationQueue (掌握)
4. NSBlockOperation + NSOperationQueue (掌握)
//----------------------------------------------------------
-(void)displayss{
    for (int i=0; i<3; i++) {
        NSLog(@"....%d....",i);
    }
}
- (IBAction)blockOperation:(id)sender {
    //addExecutionBlock添加一个blockOperation,会在主线程中执行
    //如果多个,剩下的都会在子线程中执行
    //1.创建NSBlockOperation
    NSBlockOperation *operation = [[NSBlockOperation alloc] init];
    //2.添加要执行的任务
    [operation addExecutionBlock:^{
        NSLog(@"下载图片一: %@", [NSThread currentThread]);
        [self displayss];
    }];
    [operation addExecutionBlock:^{
        NSLog(@"下载图片二: %@", [NSThread currentThread]);
        [self displayss];
    }];
    [operation addExecutionBlock:^{
        NSLog(@"下载图片三: %@", [NSThread currentThread]);
        [self displayss];
    }];
    //3.启动执行任务
    [operation start];
}
//----------------------------------------------------------
NSOperation总结:
队列类型
1. 主队列(添加到主队列中的操作都会在主线程中执行):[NSOperationQueue mainQueue]
2. 非主队列(添加到非主队列中的操作都会在子线程中执行):[[NSOperationQueue alloc] init];
设置最大并发数(执行操作的子线程数): 设置NSOperationQueue的maxConcurrentOperationCount属性

添加操作到队列中的两种方式:
1. 使用addOperationQueue方法
2. 使用addOperationWithBlock: (^{})方法

取消/暂停/恢复操作:
1. 取消所有操作:cancelAllOperations
2. 暂停所有操作:[queue setSuspended:YES];
3. 恢复所有操作:[queue setSuspended:NO];

操作依赖的设置:
[operation addDependency: otherOperation];

 
dispatch_create(queue, ^{//任务})
 
 
什么时候使用NSOperation还是GCD
GCD没有的功能:
设置最大并发数
依赖
 

多线程NSOperation的更多相关文章

  1. iOS多线程 NSOperation的用法

    上一篇写了 GCD 的使用,接下来就了解一下 NSOperation ,NSOperation是苹果对 GCD 的 OC 版的一个封装,但是相对于GCD来说可控性更强,并且可以加入操作依赖. NSOp ...

  2. iOS边练边学--多线程NSOperation介绍,子类实现多线程的介绍(任务和队列),队列的取消、暂停(挂起)和恢复,操作依赖与线程间的通信

    一.NSOperation NSOperation和NSOperationQueue实现多线程的具体步骤 先将需要执行的操作封装到一个NSOperation对象中 然后将NSOperation对象添加 ...

  3. iOS多线程--NSOperation 浅显易懂

    NSOperation是基于GCD的一套多线程实现方案,和GCD一样,线程的生命周期是由系统来自动管理的,不用像NSThread和Pthread一样让程序员手动管理.相对于GCD来说,它更加地面向对象 ...

  4. iOS开发:Swift多线程NSOperation的使用

    介绍: NSOperation是基于GCD实现,封装了一些更为简单实用的功能,因为GCD的线程生命周期是自动管理,所以NSOperation也是自动管理.NSOperation配合NSOperatio ...

  5. iOS多线程--NSOperation

    NSOperation是基于GCD的一套多线程实现方案,和GCD一样,线程的生命周期是由系统来自动管理的,不用像NSThread和Pthread一样让程序员手动管理.相对于GCD来说,它更加地面向对象 ...

  6. iOS之多线程NSOperation

    目前在 iOS 和 OS X 中有两套先进的同步 API 可供我们使用:NSOperation 和 GCD .其中 GCD 是基于 C 的底层的 API ,而 NSOperation 则是 GCD 实 ...

  7. iOS 多线程 NSOperation、NSOperationQueue

    1. NSOperation.NSOperationQueue 简介 NSOperation.NSOperationQueue 是苹果提供给我们的一套多线程解决方案.实际上 NSOperation.N ...

  8. iOS 开发多线程 —— NSOperation

    本文是根据文顶顶老师的博客学习而来,转载地址:http://www.cnblogs.com/wendingding/p/3809042.html 一.NSOperation简介 1.简单说明 NSOp ...

  9. iOS中的多线程 NSOperation

    在ios中,使用多线程有三种方式,分别是:NSThread.NSOperation和NSOperationQueue.GCD,在本节,主要讲解一下NSOperation的使用. NSOperation ...

随机推荐

  1. A Fast Priority Queue Implementation of the Dijkstra Shortest Path Algorithm

    http://www.codeproject.com/Articles/24816/A-Fast-Priority-Queue-Implementation-of-the-Dijkst http:// ...

  2. HDU 5637 Transform 搜索

    题意:bc round 74 div1 1002 中文题 分析(官方题解):注意到答案实际上只和s⊕t有关, bfs预处理下从0到xx的最短步数, 然后查询O(1)回答即可. #include < ...

  3. 编程解读 + DOS搞笑开机GIF

  4. 【原】理解Storm拓扑的并行

    Storm入门教程 1. Storm基础 Storm Storm主要特点 Storm基本概念 Storm调度器 Storm配置 Guaranteeing Message Processing(消息处理 ...

  5. MyEclipse10 Tomcat7 JDK1.7 配置

    第一步.MyEclipse10 Tomcat7 JDK1.7下载 MyEclipse10http://downloads.myeclipseide.com/downloads/products/ewo ...

  6. HDU-4690 EBCDIC 映射,模拟,沙茶

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4690 纯沙茶模拟题... //STATUS:C++_AC_93MS_228KB #include &l ...

  7. Java经典面试题

    1. Java中的异常处理机制的简单原理和应用. 当Java 程序违反了Java的语义规则时,Java虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是Java类库内置的语义检查. ...

  8. jquery如何自定义插件(扩展实例/静态方法)

    1.jquery插件的种类: 1).封装对象方法的插件(相当于实例方法) (使用 $.fn.extend({"方法名":function(参数){//方法体} }) ) 2).封装 ...

  9. Jsp中的pageContext对象

    这个对象代表页面上下文.组要用于访问页面共享数据.使用pageContext可以直接访问request,session,application范围的属性,看看这些jsp的页面: JSP 页面使用 pa ...

  10. AS问题解决系列1—Unable to execute DX错误

    http://my.oschina.net/1pei/blog/478968 摘要 在将一个开源Android代码import到Android Studio 1.2.2中时,解决了编译期间出现的“Un ...