當(dāng)使用暫停、取消任務(wù)時(shí),需要等到正在執(zhí)行的任務(wù)執(zhí)行完成后,才會(huì)執(zhí)行這個(gè)動(dòng)作。其中取消任務(wù)的動(dòng)作不可逆,取消之后任務(wù)不能重新開啟。具體代碼如下:
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
//當(dāng)self.operationQueue.suspended 為YES時(shí)執(zhí)行任務(wù),為NO時(shí)暫停任務(wù)
//每個(gè)任務(wù)都有執(zhí)行狀態(tài),暫停的時(shí)候正在執(zhí)行的任務(wù)執(zhí)行完,才會(huì)暫停
self.operationQueue.suspended = !self.operationQueue.suspended;
//取消所有的任務(wù),正在執(zhí)行的任務(wù)執(zhí)行完,才會(huì)執(zhí)行這個(gè)動(dòng)作,和暫停類似。該方法不可逆,取消后不能恢復(fù)執(zhí)行
// [self.operationQueue cancelAllOperations];
}
//NSOperationQueue,最大并發(fā)數(shù)
- (void)operationQueueMaxConcurrentOperationCount
{
//1:創(chuàng)建隊(duì)列
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
/*
默認(rèn)是并發(fā)隊(duì)列,如果最大并發(fā)數(shù)>1,并發(fā)
如果最大并發(fā)數(shù)==1,串行
系統(tǒng)默認(rèn)的并發(fā)數(shù)是-1,所有任務(wù)全部并發(fā)執(zhí)行
*/
queue.maxConcurrentOperationCount = 1;
//2:封裝操作
NSBlockOperation *op1 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"1------%@",[NSThread currentThread]);
}];
NSBlockOperation *op2 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"2------%@",[NSThread currentThread]);
}];
NSBlockOperation *op3 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"3------%@",[NSThread currentThread]);
}];
NSBlockOperation *op4 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"4------%@",[NSThread currentThread]);
}];
NSBlockOperation *op5 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"5------%@",[NSThread currentThread]);
}];
NSBlockOperation *op6 = [NSBlockOperation blockOperationWithBlock:^{
[NSThread sleepForTimeInterval:1.0];
NSLog(@"6------%@",[NSThread currentThread]);
}];
//3:把操作添加到隊(duì)列
[queue addOperation:op1];
[queue addOperation:op2];
[queue addOperation:op3];
[queue addOperation:op4];
[queue addOperation:op5];
[queue addOperation:op6];
self.operationQueue = queue;
}