GCD相當好用,但用不好就會死鎖,始終要記著這樣一句秘籍:
不要在串行隊列放dispatch_sync、dispatch_apply
下面看幾個例子
// 防死鎖秘籍:不要在串行隊列放dispatch_sync、dispatch_apply// 死鎖 主線程調用dispatch_applydispatch_async(dispatch_get_main_queue(), ^{dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) {NSLog(@"%ld",i);NSLog(@"%d",55);});});NSLog(@"%d",999);//死鎖 主線程調用dispatch_applydispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) {NSLog(@"%ld",i);NSLog(@"%d",777);});//不死鎖dispatch_queue_t queue= dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);dispatch_apply(5, queue, ^(size_t i) {NSLog(@"%ld",i);NSLog(@"%d",66);});NSLog(@"%d",88);//不死鎖dispatch_async(queue, ^{dispatch_apply(5, dispatch_get_main_queue(), ^(size_t i) {NSLog(@"%ld",i);});});
// //不死鎖dispatch_async(queue,^{dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@"test");});});//死鎖dispatch_sync(queue,^{dispatch_sync(dispatch_get_main_queue(), ^{NSLog(@"test");});});
?