文档章节

第02天多线程网络:(10):NSOperationQueue的基本使用

宇鸿165
 宇鸿165
发布于 2017/04/18 14:35
字数 388
阅读 2
收藏 0

#####一、10.NSOperationQueue的基本使用



code

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//NSInvocationOperation
[self invocationOperation];
// [self blockOperation];
}
#pragma mark 2、Block
- (void)blockOperation
{
// 1.封装操作
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"1 ---- %@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"2 ---- %@",[NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"3 ---- %@",[NSThread currentThread]);
}];

// 1.1. 追加任务
[op1 addExecutionBlock:^{
NSLog(@"4 ---- %@",[NSThread currentThread]);
}];

[op2 addExecutionBlock:^{
NSLog(@"5 ---- %@",[NSThread currentThread]);
}];
[op3 addExecutionBlock:^{
NSLog(@"6 ---- %@",[NSThread currentThread]);
}];
// 2.创建队列
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
// 3.添加到队列里面去
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];

// 简便方法
// 1.创建操作, 2.添加操作到队列中
[queue addOperationWithBlock:^{
NSLog(@"7 ---- %@",[NSThread currentThread]);

}];

/*
Log
3 ---- <NSThread: 0x618000260700>{number = 6, name = (null)}
6 ---- <NSThread: 0x610000079680>{number = 8, name = (null)}
1 ---- <NSThread: 0x60800007c340>{number = 4, name = (null)}
7 ---- <NSThread: 0x60000007a900>{number = 3, name = (null)}
2 ---- <NSThread: 0x60000007aa00>{number = 7, name = (null)}
4 ---- <NSThread: 0x60800007c580>{number = 5, name = (null)}
5 ---- <NSThread: 0x60800007c440>{number = 9, name = (null)}
*/

}

#pragma mark 1、NSInvocationOperation
- (void)invocationOperation
{
// 1.创建操作,封装任务
NSInvocationOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download1) object:nil];
NSInvocationOperation *op2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download1) object:nil];
NSInvocationOperation *op3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download1) object:nil];

// 2.创建队列
/*
GCD :
(顺序执行)串行队列: create 主队列
(随机执行)并发队列: create 全局并发队列
NSOperation :
主队列 [NSOperationQueue mainQueue] 跟GCD的主队列一样
非主队列 [[NSOperationQueue alloc]init] 非常特殊(同时具备并发和串行的功能) // 默认情况下是并发队列
*/

NSOperationQueue *queue = [[NSOperationQueue alloc]init];
[queue addOperation:op1]; // 内部已经调用了 [op1 start];
[queue addOperation:op2];
[queue addOperation:op3];

/*
Log
--- -[ViewController download1] ---<NSThread: 0x60000007f0c0>{number = 4, name = (null)}
--- -[ViewController download1] ---<NSThread: 0x610000078b80>{number = 3, name = (null)}
--- -[ViewController download1] ---<NSThread: 0x61800007c140>{number = 5, name = (null)}
*/
}

- (void)download1
{
NSLog(@"--- %s ---%@",__func__ ,[NSThread currentThread]);
}
@end

© 著作权归作者所有

宇鸿165
粉丝 1
博文 919
码字总数 368963
作品 0
广州
私信 提问
多线程的底层实现机制

1.多线程的底层实现 (1)首先回答什么是线程 1个进程要想执行任务,必须得有线程.线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 (2)什么是多线程 1个进程中可以开...

万能的匹诺曹
2016/06/22
43
0
多线程NSOperation一般使用

一、NSOperation简介 简单说明 NSOperation的作⽤:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操...

朝雨晚风
2016/08/22
0
0
iOS多线程:『NSOperation、NSOperationQueue』详尽总结

iOS多线程:『NSOperation、NSOperationQueue』详尽总结 转载: 原地址https://www.jianshu.com/p/4b1d77054b35 本文首发于我的个人博客:『不羁阁』 文章链接:传送门 本文更新时间:2018年0...

法斗斗
2018/04/20
12
0
iOS多线程编程之NSOperation和NSOperationQueue的使用

目录(?)[-] iOS多线程编程之NSThread的使用 使用 NSOperation的方式有两种 一种是用定义好的两个子类 另一种是继承NSOperation NSInvocationOperation例子 第二种方式继承NSOperation 如何控...

malawo
2013/09/05
30
0
JavaScript 30天每日效果图

JavaScript 30天每日效果图 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑战...

黎跃春
2017/07/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部