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. [转] python程序的调试方法

    qi09 原文 python程序的调试方法 本文讨论在没有方便的IDE工具可用的情况下,使用pdb调试python程序 源码例子 例如,有模拟税收计算的程序: #!/usr/bin/python de ...

  2. HDU4865 Prince and Princess 强连通分量+二分图判定

    这个题就是建图费点劲,别的和我上一篇博客一样 然后,参考思路请戳这里http://www.cnblogs.com/wally/archive/2013/09/12/3317883.html 补充:这个 ...

  3. shell获取db信息及上传下载操作

    这个脚本是获取目标机器的db信息和os信息的.os信息很好获取,db的信息包含db名字,db版本以及所有的db instance,db信息的获取稍显复杂,下面是整个脚本代码: 关键字: awk, se ...

  4. MFC文档、视图和框架

    文档.视图.框架 文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展. 文档        文档对象用于管理和维护数据,包括保存数据.取出数据以及 ...

  5. 网页推送库 SignalR

    SignalR 可以用这个库开发网页聊天室应用 ASP.NET SignalR 是为 ASP.NET 开发人员提供的一个库,可以简化开发人员将实时 Web 功能添加到应用程序的过程.实时 Web 功能 ...

  6. North America Qualifier (2015)

    https://icpc.baylor.edu/regionals/finder/north-america-qualifier-2015 一个人打.... B 概率问题公式见代码 #include ...

  7. uvalive 3263 That Nice Euler Circuit

    题意:平面上有一个包含n个端点的一笔画,第n个端点总是和第一个端点重合,因此团史一条闭合曲线.组成一笔画的线段可以相交,但是不会部分重叠.求这些线段将平面分成多少部分(包括封闭区域和无限大区域). 分 ...

  8. getsockopt/setsockopt 函数说明

    [ getsockopt/setsockopt系统调用]       功能描述: 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选 ...

  9. 50道经典的JAVA编程题 (6-10)

    50道经典的JAVA编程题 (6-10),今晚做了10道了,累死了...感觉难度不是很大,就是不知道是不是最好的实现方法啊!希望大神们能给指点哈... [程序6]GCDAndLCM.java 题目:输 ...

  10. HW5.33

    import java.util.Calendar; public class Solution { public static void main(String[] args) { long tot ...