1

我的问题很简单

+ (void) SpecialDispatchSyncTo:(dispatch_queue_t)iQueue DispatchBlock:(dispatch_block_t)block
{
    if (dispatch_get_current_queue() == iQueue) 
    {
        block();
    } 
    else 
    {
        dispatch_sync(iQueue, block);
    }  
}

我使用这段代码来提高我的一些应用程序的性能。

从代码中它的使用是相当明显的——当我调度到一个特定的队列时,它直接调用块而不是通过调度程序。

现在我的问题是 get_current_queue 函数的 ios 6 弃用,有什么想法如何在 ios 6 + 中保留此功能?

编辑:

这不是iOS 6 中完成块的 dispatch_get_current_queue() 替代方案的副本

为了更好地解释我自己,并且与链接的重复外观问题不同......我不想在“调用者方法的队列”上运行块......而是我想优化调度(我正在覆盖正常的调度方法本质)如果我已经在该队列中,则不分派到队列。

例如,考虑函数 a(这是一个 UI 事件回调)和函数 b(后台低优先级队列)都调用函数 c 的场景,其中需要向“后台低优先级队列”分派一个块。 . 如果我在函数 b -> 函数 c 的流程中,这是一个毫无意义的调度......因此我的优化。这可以提高性能,我保证,如果需要,我将通过增强 runloop 对象来实现我自己的“获取当前队列”,但我不确定我是否想走这条路,想看看是否有人有想法怎么做它。

4

0 回答 0