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];  //重启任务

 

posted on 2016-01-17 21:12  优雅的疯子≈  阅读(246)  评论(0编辑  收藏  举报