【问题标题】:How to send tasks to the background queue in Swift?如何在 Swift 中将任务发送到后台队列?
【发布时间】:2017-08-11 21:10:13
【问题描述】:

我有一个在用户点击按钮时设置的本地通知。我想将此发送到后台线程,然后更新 UI。这是一种安全的方法吗?

    DispatchQueue.global(qos: .background).async { // sends registration to background queue
        center.add(request, withCompletionHandler: {(error) in
            if let error = error {
                print(error)
            }
        })
        DispatchQueue.main.async {
            try! self.realm.write {
                self.realm.add(task)
                self.updateData()
            }
        }
    }

【问题讨论】:

    标签: ios swift multithreading ios-multithreading


    【解决方案1】:

    您应该在完成处理程序中移动主线程块,并在写入 Realm DB 时使用 do/catch 块。否则,您的代码看起来不错。

    重要提示:如果您不在单例中,请在 DispatchQueue 块中使用 [weak self]More details here.

    DispatchQueue.global(qos: .utility).async { // sends registration to background queue
        center.add(request) { error in
            if let error = error {
                print(error)
            } else {
                DispatchQueue.main.async {
                    do {
                        try self.realm.write {
                            self.realm.add(task)
                            self.updateData()
                        } catch {
                            print("Error while writing to the Realm DB:", error)
                        }
                    }
                }
            }
        })
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-02
      • 1970-01-01
      • 2015-10-05
      • 2023-03-20
      • 1970-01-01
      • 2016-03-05
      • 2021-12-03
      相关资源
      最近更新 更多