NSOperation的使用

-NSOperation是个抽象类,并不具备封装任务的能力,必须使用他的子类
1.NSInvocationOperation
2.NSBlockOperation
3.自定义类继承NSOperation 实现内部方法

NSOperation的队列
1.主队列:

NSOperationQueue *queue = [NSOperationQueue mainQueue];

2.非主队列( 同事具备并发和串行队列的功能 默认是并发队列)

NSOperationQueue *queue = [NSOperationQueue alloc] init];
创建操作的第一种方法NSInvocationOperation
NSInvocationOperation *op = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(download) object:nil];
添加操作到队列中
[queue addoperation:op];
创建操作的第二种方法

NSBlockOperation

创建操作
NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock^{ 要执行的任务 }];
追加任务
[block addExecutionBlock:^{ 要执行的任务 }];
创建队列
NSOperationQueue *queue = [NSOperationQueue alloc] init];
添加操作到队列中
[queue addOperation :block];
**************************************
简便方法
内不执行:创建操作  把操作添加到队列中
[queue addOperationWithBlock:^{ 要执行的任务 }];
创建操作的第三种方法

自定义类继承NSOperation
自定义的类MJROperation

封装操作 
修改.m文件 (- main)方法在此函数中封装任务
MJROperation *op = [MJROperation alloc] init];

#非主队列改为串行队列

修改最大并发数maxConcurrentOperationCount
1.同一时间有多少个任务可执行
2.串行执行任务 != 只开一条线程(线程同步)

1 并发 <1 串行
设置最大并发数
maxConcurrentOperationCount = 1;

暂停
[queue setSuspended : YES];
取消队列中所有的操作
[queue cancelAllOperations];


添加操作依赖
1.控制任务执行的顺序
2。不能循环依赖 (若循环则不奔溃, 只是不执行该操作)
3.可以跨队列依赖

NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock:^{ 执行的任务 }];

NSBlockOperation *block1 = [NSBlockOperation blockOperationWithBlock:^{ 执行的任务 }];
添加依赖
[block addDependency:block1];

添加监听

NSBlockOperation *block = [NSBlockOperation blockOperationWithBlock:^{ 执行的任务 }];
添加监听
block.completionBlock = ^{ block执行完后 所要执行的任务 };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值