标签:
从async和sync的字面上区分,async是异步的简称,sync是同步的简称。
1、dispatch_async意味着异步处理,主程序不会等待block块执行结果。
int main(int argc, const char * argv[]) { dispatch_queue_t queueMain = dispatch_get_main_queue(); dispatch_async(queueMain, ^{ NSLog(@"+++++++");}); NSLog(@"hahahaha"); return 0; }
输出结果:hahahaha
结果中未输出+++++++
结果分析:异步执行并不影响main线程的执行,block会添加到main队列最后。但是由于直接运行到return行,所以main线程被杀死,并未执行添加到main线程的block块。如果在app工程中,会先输出hahahaha,再输出+++++++。
2、dispatch_sync意味着同步处理,主程序必须等block块执行完毕后,才能继续往下执行。
dispatch_queue_t queueMain = dispatch_get_main_queue(); dispatch_sync(queueMain, ^{ NSLog(@"+++++++");}); NSLog(@"hahahaha");
程序停在dispatch_sync()行。
结果分析:由于main线程执行到dispatch_sync()处,就处于等待状态。将block块添加到main队列,等待当前mian线程中的任务执行完毕后,执行block块。导致两边都在等待,所以出现死锁,程序卡住。
GCD多线程-dispatch_async与dispatch_sync的区别
标签:
原文地址:http://www.cnblogs.com/zhouyi-ios/p/5066654.html