NSOperation
通常直接使用NSOperation子类:NSInvocationOperation、NSBlockOperation
NSOperation 创建同步与异步操作
//初始化一个操作,若像方式一直接调用start方法,为同步操作。即download方法会在主线程中执行.
//方式二将操作添加到队列中为异步操作
//方式一
NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(downloadImage) object:nil];
[operation start];
//操作完成回调
[operation setCompletionBlock:^{
//更新UI
}];
//方式二
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
[self downloadImage];
}];
//设置优先级(实际工作中建议不设置优先级)
blockOperation.queuePriority = NSOperationQueuePriorityHigh;
//操作完成回调
[operation setCompletionBlock:^{
//获取主线程
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//更新UI
}];
}];
//创建操作队列
NSOperationQueue *operationQueue=[[NSOperationQueue alloc]init];
operationQueue.maxConcurrentOperationCount=5;//设置最大并发线程数
[operation addDependency:blockOperation]; //设置依赖
//直接使用操队列添加操作
[operationQueue addOperation:blockOperation];
[operationQueue addOperation:operation];
[operationQueue cancelAllOperations];//取消队列所有操作
NSOperationQueue 创建异步操作
NSOperationQueue *operationQueue=[[NSOperationQueue alloc]init];
operationQueue.name = @"queue";
//将一个任务添加到队列
[operationQueue addOperationWithBlock:^{
//任务完成
//获取主线程
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
//更新UI
}];
}];
NSOperationQueue相关属性与方法
[operationQueue currentQueue];//获取当前队列
- (void)waitUntilAllOperationsAreFinished; //阻塞当前线程等待队列所有操作完成
[operationQueue setSuspended:YES];//队列挂起