一、简介
(1)是使用GCD实现的一套Objective-C的API
(2)是面向对象的线程技术
(3)提供了一些在GCD中不容易实现的特性,如:限制最大并发数量、操作之间的依赖关系
 
NSOperationQueue有两种不同类型的队列:主队列和自定义队列
主队列运行在主线程上
自定义队列在后台执行
队列处理的任务是NSOperation的子类
(1)NSInvocationOperation
(2)NSBlockOperation
 
二、NSInvocationOperation (调度操作用法)
备注:NSInvocationOperation需要配合NSOperationQueue能实现多线程编程
 NSInvocationOperation:单个任务时,默认同步执行,多个任务时,会自动开启线程,异步执行,要控制最大线程数
具体步骤:

(1)先将需要执行的操作封装到一个NSInvocationOperation对象中

(2)然后将NSInvocationOperation对象添加到NSOperationQueue中

(3)系统会自动将NSOperationQueue中的NSInvocationOperation取出来

(4)将取出的NSInvocationOperation封装的操作放到N条新线程中执行

1、NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];  创建任

2、NSOperationQueue *queue = [[NSOperationQueue alloc] init];             创建队列

queue.maxConcurrentOperationCount = 2;     设置最大并发线程数

3、[queue addOperation:operation1];    向队列添加任务,一个任务可以有多个操作

4、operation.completionBlock = ^{

// ...下载完图片后想做事情

NSLog(@"NSBlockOperation------下载图片完毕---%@", [NSThread currentThread]);

};    一个任务执行完毕之后需要做的事

5、[operation2 addDependency:operation3];  设置任务间依赖关系,operation3执行完毕之后才可以执行operation2,但是不可以循环依赖

6、[queue addOperation:operation1];添加任务到队列,自动执行操作, 自动开启线程

7、[operation start];     不将任务放入队列,直接执行操作(默认情况下, 如果操作没有放到队列queue中, 都是同步执行,就是在调用start方法的那个线程中直接执行

)

9、[NSThread sleepForTimeInterval:0.1]   线程休眠

三、NSBlockOperation(块操作用法)

备注:NSBlockOperation需要配合NSOperationQueue能实现多线程编程
 NSOperation:单个任务时,默认同步执行,多个任务时,会自动开启线程,异步执行,要控制最大线程数
具体步骤:

(1)先将需要执行的操作封装到一个NSBlockOperation对象中

(2)然后将NSBlockOperation对象添加到NSOperationQueue中

(3)系统会自动将NSOperationQueue中的NSBlockOperation取出来

(4)将取出的NSBlockOperation封装的操作放到N条新线程中执行

1、NSBlockOperation *operation1 = [NSBlockOperation blockOperationWithBlock:^{

NSLog(@"NSBlockOperation------下载图片1---%@", [NSThread currentThread]);

}];   封装一个操作

[operation1 addExecutionBlock:^{

NSLog(@"NSBlockOperation------下载图片22---%@", [NSThread currentThread]);

}];也可以通过这种方式添加操作

2、NSOperationQueue *queue = [[NSOperationQueue alloc] init];             创建队列

queue.maxConcurrentOperationCount = 2;     设置最大并发线程数

3、[queue addOperation:operation1];    向队列添加任务,一个任务可以有多个操作

[queue addOperationWithBlock:^{

NSLog(@"NSBlockOperation------下载图片3---%@", [NSThread currentThread]);

}];            也可以这种方式直接向队列添加任务

4、operation.completionBlock = ^{

// ...下载完图片后想做事情

NSLog(@"NSBlockOperation------下载图片完毕---%@", [NSThread currentThread]);

};    一个任务执行完毕之后需要做的事

5、NSInvocationOperation *operation2 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(run) object:nil];  创建任

6、[operation2 addDependency:operation3];  设置任务间依赖关系,operation3执行完毕之后才可以执行operation2,但是不可以循环依赖

7、[queue addOperation:operation1];添加任务到队列,自动执行操作, 自动开启线程

8、[operation start];     不将任务放入队列,直接执行操作(默认情况下, 如果操作没有放到队列queue中, 都是同步执行,就是在调用start方法的那个线程中直接执行

)

9、[NSThread sleepForTimeInterval:0.1]   线程休眠

NSOperation/NSOperationQueue详细使用介绍的更多相关文章

  1. iOS中的多线程NSThread/GCD/NSOperation & NSOperationQueue

    iOS多线程有四套多线程方案: Pthreads NSThread GCD NSOperation & NSOperationQueue 接下来我来一个一个介绍他们 Pthreads 在类Un ...

  2. IOS多线程(NSOperation,NSOperationQueue)

    含义:NSOperation,NSOperationQueue是什么. The NSOperation class is an abstract class you use to encapsulat ...

  3. Window VNC远程控制LINUX:VNC详细配置介绍

    Window VNC远程控制LINUX:VNC详细配置介绍 //---------------------------------------vnc linux下的详细配置 1.VNC的启动/停止/重 ...

  4. ThinkPHP 自动创建数据、自动验证、自动完成详细例子介绍(十九)

    原文:ThinkPHP 自动创建数据.自动验证.自动完成详细例子介绍(十九) 1:自动创建数据 //$name=$_POST['name']; //$password=$_POST['password ...

  5. [原]Redis详细配置介绍

    Redis详细配置介绍 # redis 配置文件示例 # 当你需要为某个配置项指定内存大小的时候,必须要带上单位, # 通常的格式就是 1k 5gb 4m 等酱紫: # # 1k => 1000 ...

  6. 原来你是这样的BERT,i了i了! —— 超详细BERT介绍(一)BERT主模型的结构及其组件

    原来你是这样的BERT,i了i了! -- 超详细BERT介绍(一)BERT主模型的结构及其组件 BERT(Bidirectional Encoder Representations from Tran ...

  7. iOS-申请邓白氏编码的超详细流程介绍

    导读 11.22号要申请苹果公司开发者账号,所以当天下午申请了邓白氏编码,昨天邓白氏编码下来了,这里就做一下记录,分享给大家. 概览 11.22提交的邓白氏编码申请,11.28(礼拜一)华夏邓白氏发来 ...

  8. iOS—如何申请苹果公司开发者账号流程详细图文介绍(包括邓白氏编码的申请方法详细介绍)

    我们要申请开发者账号,首先就需要先注册一个苹果的apple id,然后再这个账号的基础上去继续,这个相信大家都知道 这是申请appleid的地址:https://appleid.apple.com/a ...

  9. IOS NSOperation&NSOperationQueue

    NSOperation与NSOperationQueue的基本理论如下:      1.NSOperationQueue代表一个FIFO的队列,它负责管理系统提交的多个NSOperation,NSOp ...

随机推荐

  1. Git在mac中和远程仓库建立连接

    1.下载git http://git-scm.com/download/ 2. 安装git 按照文字提示即可 3. 验证是否成功,输入命令行.输出git版本表示git安装成功. git --versi ...

  2. 本地磁盘文件夹共享到虚拟机上的linux系统中

    1. 将本地的一个文件夹设置为共享文件 2.点击 虚拟机菜单中的  虚拟机->设置->选项->共享文件夹->总是启用->添加(将上一步骤设置的共享文件夹添加到里面) 3. ...

  3. srvany把程序作为Windows服务运行

    srvany.exe是什么? srvany.exe是Microsoft Windows Resource Kits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行.也就是说sr ...

  4. IIS 高并发的相关配置

    前言: 随着业务量的增加,服务器流量的增长增长了好多,高峰期会出现 503 的错误,IIS 对请求数的配置默认是 1000,无法满足现状的需求: 需要收集性能数据如下: 1.Windows性能监视器, ...

  5. C# var声明变量解析

    C# var声明变量解析: 在C#3.0中提供了一种新的声明变量的方式,这就是var. 通过这个关键字,在声明变量时就无需指定类型了,变量类型是在初始化时由编译器确定的.代码如下: var ss = ...

  6. 【VS2013生成DirectX Tutorials时遇到的错误】无法解析的外部符号 _D3D10CreateDeviceAndSwapChain@32

     本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/p/3696472.html 今天尝试编译DirectX10中的一个Turorials时, ...

  7. LeetCode OJ:Binary Tree Inorder Traversal(中序遍历二叉树)

    Given a binary tree, return the inorder traversal of its nodes' values. For example:Given binary tre ...

  8. json与DataTable相互转换

    首先我们看看 Newtonsoft.Json.JsonConvert 是怎么完成的: DataTable table = new DataTable(); table.Columns.Add(&quo ...

  9. Codeforces Round #276 (Div. 2)D - Maximum Value(筛法)

    就是一种筛法思想的应用. #include<iostream> #include<cstdio> #include<cstdlib> #include<cst ...

  10. Spring Boot同时开启HTTP和HTTPS服务

    由于Spring Boot中通过编码开启HTTPS服务比较复杂,所以官方推荐通过编码开启HTTP服务,而通过配置开启HTTPS服务. Spring Boot的application.yml中添加如下配 ...