ios - 如何在 dispatch_async 中调试当前队列?

标签 ios swift grand-central-dispatch

这是我在其中一个项目中遇到的:

private func updateBadgeView() {

    dispatch_async(dispatch_get_main_queue()) {

        if UIApplication.sharedApplication().applicationIconBadgeNumber > 0 {

            self.newMessagesBadgeView.hidden = false
            self.newMessagesCountLabel.text = String(UIApplication.sharedApplication().applicationIconBadgeNumber)

        } else {
            self.newMessagesBadgeView.hidden = true
        }
    }
}

而且我认为该队列的 dispatch_async 在这里是无用的。我如何查看此处的队列?我真的需要这个街区吗?我需要检查它是否与没有阻塞的队列相同。

上述函数在UIViewController 的子类中,在viewDidLoadviewDidAppear 中调用

更新:

我知道因为ios有bug,这里需要:

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    dispatch_async(dispatch_get_main_queue()) {
        self.presentOverlayController(selectViewController)
    }
}

最佳答案

如果在viewDidLoadviewDidApperar中调用是没用的。 但是,您可以使用类似的代码进行检查:

private func updateBadgeView() {

    let block = {
            if UIApplication.sharedApplication().applicationIconBadgeNumber > 0 {

            self.newMessagesBadgeView.hidden = false
            self.newMessagesCountLabel.text = String(UIApplication.sharedApplication().applicationIconBadgeNumber)

        } else {
            self.newMessagesBadgeView.hidden = true
        }
    }

    if ([NSThread isMainThread]) {
        block();
    } else {
        dispatch_async(dispatch_get_main_queue()) {
        block();
        }    
    }
}

关于ios - 如何在 dispatch_async 中调试当前队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39588988/

相关文章:

iphone - 可滚动位置后窗口的背面

ios - 类中的类型别名与 swift 中函数中的类型别名 (iOS)

ios - 从 Branch.io 响应中获取值(value)并设置操作 (Swift)

animation - UIView.animateWithDuration 不使用信号量执行

cocoa - 如何使用 GCD 安全地锁定变量?

jQuery .keypress 返回值在 iOS 上不显示

iphone - 如何检查应用程序是否在后台运行

ios - 如何编写代码来读取.fla 文件?

另一个属性的 Swift 类属性

iphone - iOS 4 GCD 问题