iOS8之后,提交到gcd队列中的dispatch block也可取消了,只需要简单的调用dispatch_block_cancel传入想要取消的block即可:
dispatch_queue_t queue = dispatch_queue_create("queue", DISPATCH_QUEUE_SERIAL); dispatch_block_t block1 = dispatch_block_create(0, ^{ NSLog(@"block1 begin"); [NSThread sleepForTimeInterval:1]; NSLog(@"block1 done"); }); dispatch_block_t block2 = dispatch_block_create(0, ^{ NSLog(@"block2 "); }); dispatch_async(queue, block1); dispatch_async(queue, block2); dispatch_block_cancel(block2);