ios开发多线程一:了解-NSOperation的基本使用




#import "ViewController.h" @interface ViewController () @end @implementation ViewController -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
[self blockOperation];
} /**
* 1:NSOperation封装任务的两种方式:NSInvocationOperation,NSBlockOperation,其中两种方法若没指定队列,则默认是在主队列里去执行
2:住家任务:addExecutionBlock:
注意:如果一个操作中的任务数量大于1,那么会开子线程并发执行任务 注意:不一定是子线程,有可能是主线程
*/ -(void)invocationOpeation
{ //1.创建操作,封装任务
/*
第一个参数:目标对象 self
第二个参数:调用方法的名称
第三个参数:前面方法需要接受的参数 nil
*/
NSInvocationOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download1) object:nil];
NSInvocationOperation *op2 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download2) object:nil];
NSInvocationOperation *op3 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(download3) object:nil]; //2.启动|执行操作
[op1 start];
[op2 start];
[op3 start];
} -(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,那么会开子线程并发执行任务
//注意:不一定是子线程,有可能是主线程
[op3 addExecutionBlock:^{
NSLog(@"4---%@",[NSThread currentThread]);
}]; [op3 addExecutionBlock:^{
NSLog(@"5---%@",[NSThread currentThread]);
}]; [op3 addExecutionBlock:^{
NSLog(@"6---%@",[NSThread currentThread]);
}]; //2.启动
[op1 start];
[op2 start];
[op3 start];
} -(void)download1
{
NSLog(@"%s----%@",__func__,[NSThread currentThread]);
} -(void)download2
{
NSLog(@"%s----%@",__func__,[NSThread currentThread]);
} -(void)download3
{
NSLog(@"%s----%@",__func__,[NSThread currentThread]);
} @end
###2.NSOperation
- 2.1 NSOperation基本使用
(1)相关概念
01 NSOperation是对GCD的包装
02 两个核心概念【队列+操作】
(2)基本使用
01 NSOperation本身是抽象类,只能只有它的子类
02 三个子类分别是:NSBlockOperation、NSInvocationOperation以及自定义继承自NSOperation的类
03 NSOperation和NSOperationQueue结合使用实现多线程并发
(3)相关代码
```objc
// 01 NSInvocationOperation
//1.封装操作
/*
第一个参数:目标对象
第二个参数:该操作要调用的方法,最多接受一个参数
第三个参数:调用方法传递的参数,如果方法不接受参数,那么该值传nil
*/
NSInvocationOperation *operation = [[NSInvocationOperation alloc]
initWithTarget:self selector:@selector(run) object:nil];
//2.启动操作
[operation start];
-------------------------------------------------
// 02 NSBlockOperation
//1.封装操作
/*
NSBlockOperation提供了一个类方法,在该类方法中封装操作
*/
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
//在主线程中执行
NSLog(@"---download1--%@",[NSThread currentThread]);
}];
//2.追加操作,追加的操作在子线程中执行
[operation addExecutionBlock:^{
NSLog(@"---download2--%@",[NSThread currentThread]);
}];
[operation addExecutionBlock:^{
NSLog(@"---download3--%@",[NSThread currentThread]);
}];
//3.启动执行操作
[operation start];
----------------------------------------------
// 03 自定义NSOperation
//如何封装操作?
//自定义的NSOperation,通过重写内部的main方法实现封装操作
-(void)main
{
NSLog(@"--main--%@",[NSThread currentThread]);
}
//如何使用?
//1.实例化一个自定义操作对象
XMGOperation *op = [[XMGOperation alloc]init];
//2.执行操作
[op start];
```
ios开发多线程一:了解-NSOperation的基本使用的更多相关文章
- 记Booking.com iOS开发岗位线上笔试
今晚参加了Booking的iOS职位线上笔试,结束后方能简单归纳一下. 关于测试内容: Booking采用了HackerRank作为测试平台,测试总时长为75分钟,总计4道题. 测试之前我很紧张,因为 ...
- iOS开发多线程篇 11 —自定义NSOperation
iOS开发多线程篇—自定义NSOperation 一.实现一个简单的tableView显示效果 实现效果展示: 代码示例(使用以前在主控制器中进行业务处理的方式) 1.新建一个项目,让控制器继承自UI ...
- iOS开发多线程之NSOperation
NSInvocationOperation The NSInvocationOperationclass is a concrete subclass of NSOperationthat you u ...
- iOS 之 多线程一
iOS中实现多线程的技术方案 pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; ...
- iOS开发-多线程之GCD(Grand Central Dispatch)
Grand Central Dispatch(GCD)是一个强有力的方式取执行多线程任务,不管你在回调的时候是异步或者同步的,可以优化应用程序支持多核心处理器和其他的对称多处理系统的系统.开发使用的过 ...
- iOS开发多线程之NSThread
一.NSThread的属性与方法 1.NSThread 类方法 类方法,顾名思义通过类名直接调用的方法 1. + (void)detachNewThreadWithBlock:(void (^)(vo ...
- iOS开发 - 多线程实现方案之NSOperation篇
NSOperation简介 1.实现多线程编程步骤: 配合使用NSOperation和NSOperationQueue实现多线程编程,我们不用考虑线程的生命周期.同步.加锁等问题,如下: 先将需要执行 ...
- iOS开发多线程之GCD
Grand Central Dispatch(GCD)是异步执行任务的技术之一.一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的Dispatch Que ...
- iOS开发之多线程技术——NSOperation篇
本篇将从四个方面对iOS开发中使用到的NSOperation技术进行讲解: 一.什么是NSOperation 二.我们为什么使用NSOperation 三.在实际开发中如何使用NSOperation ...
随机推荐
- vue.js有什么用,是用来做什么的(整理)
vue.js有什么用,是用来做什么的(整理) 一.总结 一句话总结:用数据绑定的思想,vue可以简单写单个页面,也可以写一个大的前端系统,也可以做手机app的界面. 1.Vue.js是什么? 渐进式框 ...
- thinkphp多层volist实现多表查询
thinkphp多层volist实现多表查询 一.总结 二.截图 三.代码 1.控制器 2.视图
- POJ 1737 Connected Graph (大数+递推)
题目链接: http://poj.org/problem?id=1737 题意: 求 \(n\) 个点的无向简单(无重边无自环)连通图的个数.\((n<=50)\) 题解: 这题你甚至能OEIS ...
- JAVA 多线程和进程概念的引入
1.并发和并行 并行:指两个或多个时间在同一时刻发生(同时发生): 并发:指两个或多个事件在一个时间段内发生. 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多个程序同时运行,这在单 C ...
- POJ 1012:Joseph
Joseph Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 50068 Accepted: 19020 Descript ...
- Android学习笔记之按键操作
我们如何和Android 程序来进行交互那份?来让 Android 程序产生相应的反应,我们不得不通过键盘事件.触摸事件.传感器事件等来实现. 键盘是Android中主要的输入设备,对按键的响应的处理 ...
- Android中的Parcelable接口和Serializable使用方法和差别
Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ...
- Dcloud课程4 如何进行APP接口开发
Dcloud课程4 如何进行APP接口开发 一.总结 一句话总结:通过json或者xml. 1.APP如何进行通信? 通过在地址上接参数指明传递的数据的类型.而数据传递的类型一般是XML和json. ...
- Linux字符界面安装图形界面XWindow
https://jingyan.baidu.com/article/219f4bf790f4c7de442d3825.html
- (转)bat批处理的注释语句
在批处理中,段注释有一种比较常用的方法: goto start = 可以是多行文本,可以是命令 = 可以包含重定向符号和其他特殊字符 = 只要不包含 :start 这一行,就都是注释 :start 另 ...