如何替换已弃用的方法dispatch_get_current_queue()?

38

我正在使用xmppframework在iOS 5上开发一款聊天应用程序,它工作得非常好。

但是我将Xcode更新到4.5.1,iOS 5更新到iOS 6,Mac OS更新到10.7.5后,由于弃用问题,该项目无法正常工作。我已经替换了所有在iOS 6中被弃用的方法,唯独这一个没有:

dispatch_get_current_queue()  

如何在 iOS 6 中替换此方法?


dispatch_get_current_queue 没有被弃用。你看到了什么错误或警告? - Noah Witherspoon
1
@NoahWitherspoon __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_6,__MAC_NA,__IPHONE_4_0,__IPHONE_6_0) 意味着它从6.0开始被弃用。 - Nir Golan
3
哦,原来是这样。我看的文档可能错了。 - Noah Witherspoon
1
以下回答提供了几种替代方案:https://dev59.com/XGYr5IYBdhLWcg3w---U - Catfish_Man
2个回答

4

这取决于你需要通过此调用实现什么目的。
Apple 表示这应该只用于调试。

也许队列并不重要(因为你只需要一个后台队列),所以使用具有特定优先级的全局队列(dispatch_get_global_queue(dispatch_queue_priority_t priority, unsigned long flags);

或者,

如果你需要在同一队列中执行一些代码片段,则创建一个队列,保留它,并将所有任务分派到该队列中。


2
如何使用NSOperationQueue呢?
-(void) doSomeThing:(void (^)(BOOL success)) completionHandler
{
    NSOperationQueue* callbackQueue = [NSOperationQueue currentQueue];
    if(!callbackQueue) {
        callbackQueue = [NSOperationQueue mainQueue];
    }
    dispatch_async(...,^{
         // do heavyweight stuff here
         // then call completionHandler
         if(completionHandler) {
             [callbackQueue addOperationWithBlock:^{
                 completionHandler(...);
             }];
         }
    });

我不确定这是正确的方法,因为现在你只是将操作的最后一部分添加到了队列的末尾。如果你的队列有一个最大并发操作,并且你的队列中有20个操作,那该怎么办? - horseshoe7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接