您的位置:首页 > 运维架构

NSOperation

2016-01-17 21:12 183 查看
1. NSOperation类是一个抽象类,用来封装单任务的代码和数据。不能直接使用该类,可以使用系统定义的子类(NSInvocationOperation,NSBlockOperation)来完成任务,也可以自定义。需要将NSOperation的子类对象添加到队列中,用NSOperationQueue来实现,

2.NSOperation子类的创建方式

(1)NSInvocationOperatin创建

NSInvocationOperation *operation = [NSInvocationOperation alloc]initWithTarget:<#(nonnull id)#> selector:<#(nonnull SEL)#> object:<#(nullable id)#>];

(2)NSBlockOperation创建

NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{

<#code#>

}];

(3)子类化创建

① 创建NSOperation的类

② 覆写main方法

③ 初始化子类

3. 队列的创建

NSOperationQueue *queue = [[NSOperationQueue alloc] init];

4. 添加任务到任务队列

(1)[queue addOperation:<#(nonnull NSOperation *)#>]; //添加单个任务

(2)[queue addOperations:<#(nonnull NSArray<NSOperation *> *)#> waitUntilFinished:<#(BOOL)#>]; //添加多个任务,并且设置是否等待任务完成

(3)[queue addOperationWithBlock:^{

<#code#>

}]; //隐式添加

5.设置依赖需在添加到队列之前,添加依赖成功的前提是必须添加到队列中

[operation addDependency:<#(nonnull NSOperation *)#>]; operation与添加的队列是同步的,需等待添加的队列执行完后再执行operation

6. 设置队列的优先级

[operation setQueuePriority:<#(NSOperationQueuePriority)#>];

队列的级别设置

NSOperationQueuePriorityVeryLow

NSOperationQueuePriorityLow

NSOperationQueuePriorityNormal

NSOperationQueuePriorityHigh

NSOperationQueuePriorityVeryHigh

7.设置最大并发数

[queue setMaxConcurrentOperationCount:<#(NSInteger)#>];

8.取消任务 (正在执行的任务无法取消)

[operation cancel]; //取消单个任务

[queue cancelAllOperations]; //取消全部任务

9. 阻塞线程

[operation waitUntilFinished];

10.暂停和重启任务

[queue setSuspended:YES]; //暂停任务

[queue setSuspended:NO]; //重启任务
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: