OC 线程操作3 - NSOperation
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
[self BlockOperation];
}
-(void)BlockOperation{
//1.创建任务
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op1----%@", [NSThread currentThread]);
}] ;
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op2----%@", [NSThread currentThread]);
}] ;
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"op3----%@", [NSThread currentThread]);
}] ;
//2.追加任务 注意:如果一个线程中的任务数量大于1,那么会开子线程并发执行任务,会开子线程但是不一定所有任务都在子线程运行,有可能某个任务是在主线程执行
[op3 addExecutionBlock:^{
NSLog(@"op4----%@", [NSThread currentThread]);
}];
[op3 addExecutionBlock:^{
NSLog(@"op5 ----%@", [NSThread currentThread]);
}];
//3.操作监听, 可以放到任何位置,这个block也是并发执行的,不是一定在执行完op3 就会执行,他们不一定在同一个线程
op3.completionBlock = ^{
NSLog(@"op3.completionBlock=====");
};
//4.启动操作
// [op1 start];
// [op2 start];
// [op3 start];
//5.依赖需要添加到队列之前,可以跨队列依赖,并且不能循环依赖,循环依赖不会执行循环的代码, 执行其他的
[op1 addDependency:op2];
[op2 addDependency:op3];
//6. 创建非主队列, 主队列是[NSOperationQueue mainQueue]
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSOperationQueue *queue2 = [[NSOperationQueue alloc] init];
//7、添加任务 使用继承的方法可以看到 执行顺序 是 [op3 start]方法 - main 方法
[queue addOperation:op3];//默认添加了 [op3 start]方法
[queue addOperation:op1];//默认添加了 [op1 start]方法
[queue2 addOperation:op2];//默认添加了 [op2 start]方法
//8.线程同时执行的数量 线程同时执行的数量,-1是最大值, 0是同步执行(打印结果线程不是一样的, 但是执行顺序 一定是1234,打印多少次都是1234),
queue.maxConcurrentOperationCount = ;
//9.简便添加方法 这个等于 步骤1 和步骤4 ,但是没办法添加依赖和监听,看具体使用环境 一般回到主队列刷新UI使用
[queue addOperationWithBlock:^{
NSLog(@"op110 ----%@", [NSThread currentThread]);
}];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
NSLog(@"回到主队列了-%@", [NSThread currentThread]);
}];
}
-(void)InvocationOperation{
/**
参数1:使用对象
参数2:调用方法名称
参数3:前面方法需要参数
*/
NSInvocationOperation *op1 = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(downLoad) object:nil];
//开启线程
[op1 start];
// op1.cancel;
// [self downLoad]; //这个和上边 两行一样。。。
}
-(void)downLoad{
NSLog(@"%s----%@", __func__, [NSThread currentThread]);
}
@end
OC 线程操作3 - NSOperation的更多相关文章
- OC 线程操作3 - NSOperation 实现线程间通信
#import "ViewController.h" @interface ViewController () /** 图片 */ @property (weak, nonatom ...
- OC 线程操作2 - NSThread
方法1 :直接创建 alloc init - (void)createNSThread111{ /* 参数1: (nonnull id) 目标对象 self 参数2:(nonnull SEL) ...
- OC 线程操作 - GCD队列组
1.队列组两种使用方法2.队列组等待 wait /** 新方法 队列组一般用在在异步操作,在主线程写队列组毫无任何作用 */ - (void)GCD_Group_new_group___notify{ ...
- OC 线程操作 - GCD快速迭代
- (void)forDemo{ //全都是在主线程操作的 ; i<; i++) { NSLog(@"--%@", [NSThread currentThread]); } ...
- OC 线程操作 - GCD使用 -同步函数,异步函数,串行队列,并发队列
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // GCD 开几条线程并不是我们 ...
- OC 线程操作1 - pthread
#import "ViewController.h" #import <pthread.h> //1.需要包含这个头文件 @interface ViewControll ...
- OC 线程操作 - GCD使用 -线程通讯, 延迟函数和一次性代码
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ // [self downImag ...
- OC 线程操作 - GCD使用 - 栅栏函数
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //同步函数无需栅栏函数 //栅栏 ...
- OC线程操作-GCD介绍
1. GCD介绍 1.11.2 1.3 异步具备开启能力但是不是 一定可以开启 1.4 1.5 67. 8.
随机推荐
- 版本管理工具---svn搭建与使用
SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS.CVS,它采用了分支管理系统,它的设计目标就是取代CVS.互联网上很多版本控制服务已从CVS迁移到Subversion ...
- flume系统使用以及与storm的初步整合
Flume NG的简单使用可以参考介绍文档:http://blog.csdn.net/pelick/article/details/18193527,图片也来源此blog: 下载完fl ...
- pandas的merge函数
pandas.merge(left,right,how='inner',on=None,left_on=None,right_on=None,left_index=False,right_index= ...
- Ps操作技巧(快捷键大全)
一.工具箱(多种工具共用一个快捷键的可同时按[Shift]加此快捷键选取) 矩形.椭圆选框工具 [M] 移动工具 [V] 套索.多边形套索.磁性套索 [L] 魔棒工具 [W] 裁剪工具 [C] 切片工 ...
- bravado哺乳内衣适合试穿体验,分享给需要买哺乳内衣的妈妈们。
看来看去还是觉得在美德乐天猫旗舰店(www.bravadobravado.com)购买最保险. 这款内衣穿起来非常舒服,感觉一点都不勒,而且面料也很透气,我生宝宝之前怀孕的时候穿80C,这个本来一开始 ...
- 详解 Facebook 田渊栋 NIPS2017 论文:深度强化学习研究的 ELF 平台
这周,机器学习顶级会议 NIPS 2017 的论文评审结果已经通知到各位论文作者了,许多作者都马上发 Facebook/Twitter/Blog/ 朋友圈分享了论文被收录的喜讯.大家的熟人 Faceb ...
- RHEL6.x查看网卡槽位对应设备文件及路径
先查看网卡mac地址,由于我的服务器做了mac地址绑定,所以会有相同的hwaddr地址,请忽略. [root@node-0a0a05d3- net]# ifconfig eth0 | grep HWa ...
- 使用CMQ和SCF实现邮件发送
准备腾讯云 API 调用工具 使用 API 命令行工具来管理和运行无服务器云函数(SCF),下面就先来安装配置该工具. 安装 Python 和 PIP Python 环境是腾讯云命令行工具运行时的必要 ...
- 折腾了好久,thinkphp5打开提示加载failed to open stream: No such file or directory in think start.php
GIT上下载的THINKPHP5记得先 composer update 我就是没update ,折腾了1个小时,才想起来这个事 thinkphp5默认首页打开空白 打开报错提示 提示thinkphp ...
- 最近开始研究php的缓存技术,来个系统自带的OPcache
最近开始研究php的缓存技术,来个系统自带的OPcache php5.5以上版本 系统自带 PHP5.2-5.4 可通过扩展来安装 OPcache是 zend出品 比apc的优势在于 长期更新 ...
