从iOS6.0版本起,已经正式启用此函数了。
该函数有种典型的错误用法,就是用它检测当前队列是不是某个特定的队列。
因为派发队列之间有层级关系,所以无法准确判断运行队列,最好的办法是通过GCD所提供的功能来设定”队列特有数据“,此功能可以把任意数据以键值对的形式关联到队列里。
dispatch_queue_t queueA = dispatch_queue_create("EOCQueueA", NULL);
dispatch_queue_t queueB = dispatch_queue_create("EOCQueueB", NULL);
dispatch_set_target_queue(queueB, queueA);
static int kQueueSpecific;
CFStringRef queueSpecificValue = CFSTR("queueA");
dispatch_queue_set_specific(queueA, &kQueueSpecific, (void *)queueSpecificValue, (dispatch_function_t)CFRelease);
dispatch_sync(queueB, ^
{
dispatch_block_t block = ^
{
NSLog(@"No deadlock");
};
CFStringRef retrievedValue = dispatch_get_specific(&kQueueSpecific);
if (retrievedValue)
{
block();
}
else
{
dispatch_sync(queueA, block);
}
});