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.
随机推荐
- [UE4]C++ string的用法和例子
使用场合: string是C++标准库的一个重要的部分,主要用于字符串处理.可以使用输入输出流方式直接进行操作,也可以通过文件等手段进行操作.同时C++的算法库对string也有着很好的支持,而且st ...
- Eclipse里面的Maven项目如果下载依赖的jar包的源码
Window---------Properties---------------Maven--------------勾选Download Artifact Sources和Download Arti ...
- BCGcontrolBar(五) 对话框大小改变控件自动适应
改变控件大小 首先在 构造函数中加入 EnableLayout(); 在OnInitDialog()函数中加入 CBCGPStaticLayout* pLayout = (CBCGPStaticLay ...
- 笔记本电脑安装centos 7(转)
1. 下载 CentOS 镜像 下载地址 : https://wiki.centos.org/Download, 我下载的是1406 2. 使用 UltraISo 将镜像刻录到U盘 UltraISo ...
- 信息学奥赛(NOIP)复赛学习方法推荐
一.确定你的语言 NOIP包括三种语言c/c++/pascal,在最初必须确定自己使用的语言.没有c/c++基础的,个人建议使用pascal,因为它更容易上手,如果有充裕的时间,则建议c/c++,因为 ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #18 向ext4转换
HACK #18 向ext4转换 ext4可以与ext2/ext3在后台进行互换.这里将介绍从ext2/ext3转换的方法以及转换时的注意事项.转换有两种方法可以将ext2/ext3的磁盘映像作为ex ...
- mybatis匹配字符串的坑
where语句中我们经常会做一些字符串的判断,当传入的字符串参数为纯数字时,在mybatis的条件语句test里匹配全数字字符串需要注意会有如下现象: 所以里面的字符串需要加单引号,mybatis是匹 ...
- vb 读取指定路径文件名
Private Sub ExportCostSheetData() InsertRow("") InsertRow("Run 2:Export CostingSheet= ...
- selenium+python自动化95-弹出框死活定位不到
前言 部分小伙伴学了selenium的alert后,就不管啥弹出框都去用alert,这是行不通的,看到弹出框,先要确定是不是alert,是才能用,不是的话肯定不能用. 有些弹出框是div层,这种跟平常 ...
- linux系统下修改文件夹目录权限-chmod
Linux.Fedora.Ubuntu修改文件.文件夹权限的方法差不多.很多人开始接触Linux时都很头痛Linux的文件权限问题.这里告诉大家如何修改Linux文件-文件夹权限.以主文件夹下的一个名 ...
