NSOperationQueue作用:
NSOperation可以调用start方法来执行任务,但默认是同步执行的;如果将NSOperation添加到NSOperationQueue中,系统会自动异步执行NSOperation中的操作;
添加操作到NSOperationQueue中:
- (void)addOperation:(NSOperation *)p;
- (void)addOperationWithBlock:(void (^)(void))block;
最大并发数: 同时执行任务的最大数;开启新线程的最大数;
队列的取消、暂停、恢复:
取消操作:
- (void)cancelAllOperation;
(队列方法,全部取消)
- (void)cancle;
(操作方法,取消单个操作)
暂停和恢复:
- (void)setSuspended(BOOL)b;
//YES代表暂停队列,NO代表恢复队列;
使用场景:在一个UITableView中,有加载数据图片的时候,当你滑动表单时,可以暂停队列任务,当你停止滑动,你就可以恢复队列任务;
操作优先级:
1,设置NSOperation在queue中的优先级,可以改变操作的执行优先级;
- (NSOperationQueuePriority)queuePriority;
- (void)setQueuePriority:(NSOperationQueuePriority)p;
2,优先级的取值;
(1)NSOperationQueuePriorityVeryLow = -8L;
(2)NSOperationQueuePriorityLow = -4L;
(3)NSOperationQueuePriorityNormal = 0;
(4)NSOperationQueuePriorityHigh = 4;
(5)NSOperationQueuePriorityVeryHigh = 8;
操作依赖:
1,NSOperation之间可以设置依赖来保证执行顺序;
比如一定要让操作A执行完后,才能执行操作B,可以这么写
[operationB addDependency:operationA]; //操作B依赖于操作A
2,可以不同queue的NSOperation之间创建依赖关系;
监听:
- (void)opeationListen
{
NSBlockOperation *operation = [NSBlockOperation blockOperationWithBlock:^{
for (int i = 0; i<10; i++) {
NSLog(@"NSBlockOperation------下载图片---%@", [NSThread currentThread]);
}
}];
operation.completionBlock = ^{
// ...下载完图片后想做事情
NSLog(@"NSBlockOperation------下载图片完毕---%@", [NSThread currentThread]);
};
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[queue addOperation:operation];
}
版权声明:本文为博主原创文章,未经博主允许不得转载。