【问题标题】:How can I replace deprecated method dispatch_get_current_queue()? [duplicate]如何替换已弃用的方法 dispatch_get_current_queue()? [复制]
【发布时间】:2012-10-02 06:30:54
【问题描述】:

我正在使用 iOS 5 中的 xmppframework 开发一个聊天应用程序;效果很好。

但我将 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 未被弃用。您看到了什么错误或警告?
  • @NoahWitherspoon __OSX_AVAILABLE_BUT_DEPRECATED(__MAC_10_6,__MAC_NA,__IPHONE_4_0,__IPHONE_6_0) 表示从 6.0 开始不推荐使用它
  • 嗯。确实如此。我猜我看错了文档。
  • 这里的答案提供了几种选择:stackoverflow.com/questions/13237417/…

标签: iphone ios grand-central-dispatch


【解决方案1】:

这取决于您需要通过此调用实现什么。
苹果表示无论如何它都应该用于调试。

也许队列无关紧要(因为您只需要一个后台队列)所以获得一个具有特定优先级的全局队列(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 个操作怎么办?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    • 2018-03-30
    • 2020-05-26
    • 2021-06-25
    • 1970-01-01
    相关资源
    最近更新 更多