Swift如何发送任务到后台队列?
How to send tasks to the background queue in Swift?
我有一个在用户点击按钮时设置的本地通知。我想将其发送到后台线程,然后更新 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()
}
}
}
您应该将主线程块移动到完成处理程序中,并在写入 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)
}
}
}
}
})
}
我有一个在用户点击按钮时设置的本地通知。我想将其发送到后台线程,然后更新 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()
}
}
}
您应该将主线程块移动到完成处理程序中,并在写入 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)
}
}
}
}
})
}