iOS面试题系列:
使用GCD处理多线程,在多核心CPU下,会提高执行效率,下面是一段在项目中使用的GCD代码。
1. - (void)gcdDownload
2. {
3. static dispatch_once_t once;
4. static dispatch_queue_t queue;
5. //create download queue
6. dispatch_once(&once, ^{
7. queue =dispatch_queue_create("com.xxx.download.background",DISPATCH_QUEUE_CONCURRENT);
8. });
9. //__block type
10. __block BOOL downloadFlag = NO;
11. dispatch_async(queue, ^{
12. // downloadFlag = [Download sendRequest:request];
13. NSLog(@"长时间任务,如网络下载");
14. });
15.
16. dispatch_barrier_async(queue,^{
17. if (downloadFlag) {
18. NSLog(@"下载成功完成");
19. }
20.
21. dispatch_async(dispatch_get_main_queue(), ^{
22. NSLog(@"执行完下载,回掉回主线程,例如刷新UI");
23.
24. });
25. });
26. }
可以向queue里放多个并发block。