在實際開發過程中,有時候需要設置任務之間的依賴關系,iOS主要有兩種方案,一種是基于GCD,另一種是基于NSOperation,下面分別介紹。
/**任務1,2并行執行,執行完后任務3執行*/
1.基于GCD的實現方案
/**方法1*/
[objc]view plaincopy
dispatch_group_t?group?=dispatch_group_create();
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),?^{
NSLog(@"任務1");
});
dispatch_group_async(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),?^{
NSLog(@"任務2");
});
dispatch_group_notify(group,dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),?^{
NSLog(@"任務3");
});
/*方法2*/
/*
*dispatch_barrier_async會等待當前隊列的任務執行完之后再執行dispatch_barrier_async(myqueue, ^{
NSLog(@"任務3");
});中定義的任務,該任務執行完成后,會繼續執行隊列后面的任務。
*/
[objc]view plaincopy
dispatch_queue_t?myqueue?=dispatch_queue_create("myqueue.queue",DISPATCH_QUEUE_CONCURRENT);
dispatch_async(myqueue,?^{
NSLog(@"任務1");
});
dispatch_async(myqueue,?^{
NSLog(@"任務2");
});
dispatch_barrier_async(myqueue,?^{
NSLog(@"任務3");
});
dispatch_async(myqueue,?^{
NSLog(@"任務4");
});
dispatch_async(myqueue,?^{
NSLog(@"任務5");
});
任務1,2并行執行,執行完后任務3執行,執行完后任務4,5并行執行。
2.基于NSOPeration實現
[objc]view plaincopy
NSBlockOperation*opration1=?[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"任務1");
}];
NSBlockOperation*opration2=?[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"任務2");
}];
NSOperationQueue*operationQueue?=?[[NSOperationQueuealloc]init];
[operationQueueaddOperation:opration1];
[operationQueueaddOperation:opration2];
NSBlockOperation*opration3=?[NSBlockOperationblockOperationWithBlock:^{
NSLog(@"任務3");
}];
[opration3addDependency:opration1];
[opration3addDependency:opration2];
[operationQueueaddOperation:opration3];