swift 中的 Grand Central Dispatch (GCD)
Grand Central Dispatch (GCD) in swift
我熟悉在 Android 中使用 AsyncTask:创建子类,在子类的实例上调用 execute 并在 UI 线程或主线程上调用 onPostExecute。 swift 中的等价物是什么??
这解决了我在 Swift 中的大部分异步需求:
public func background(function: @escaping () -> Void) {
DispatchQueue.global().async(execute: function)
}
public func main(function: @escaping () -> Void) {
DispatchQueue.main.async(execute: function)
}
然后像这样使用:
background {
// I'm in the background
main {
// I'm back on Main
}
}
例如:
background { [weak self] in
let result = longOperationToFetchData()
main {
self?.data = result.data
self?.reloadTableView()
}
}
我认为使用NSOperationQueue 更优雅和简单。您创建了一个队列:
var queue = NSOperationQueue()
并创建任务:
let operation = NSBlockOperation { () -> Void in
// Perform your task
}
之后,将您的任务放入队列
queue.addOperation(operation)
也就是说。如果您想执行 UI-related 任务,请使用此代码块:
NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in
// UI related task
}
NSOperationQueue 为您提供了设置任务之间依赖关系的简单方法。例如,您有 4 个任务,op1、op2、op3、op4。而你希望op1需要在op2之前完成,那么你可以这样写:
op2.addDependency(op1)
然后 op2 将在 op1 完成后被触发。由于 op3 和 op4 没有依赖关系,因此可以在 op2
之后完成 before/or
我熟悉在 Android 中使用 AsyncTask:创建子类,在子类的实例上调用 execute 并在 UI 线程或主线程上调用 onPostExecute。 swift 中的等价物是什么??
这解决了我在 Swift 中的大部分异步需求:
public func background(function: @escaping () -> Void) {
DispatchQueue.global().async(execute: function)
}
public func main(function: @escaping () -> Void) {
DispatchQueue.main.async(execute: function)
}
然后像这样使用:
background {
// I'm in the background
main {
// I'm back on Main
}
}
例如:
background { [weak self] in
let result = longOperationToFetchData()
main {
self?.data = result.data
self?.reloadTableView()
}
}
我认为使用NSOperationQueue 更优雅和简单。您创建了一个队列:
var queue = NSOperationQueue()
并创建任务:
let operation = NSBlockOperation { () -> Void in
// Perform your task
}
之后,将您的任务放入队列
queue.addOperation(operation)
也就是说。如果您想执行 UI-related 任务,请使用此代码块:
NSOperationQueue.mainQueue().addOperationWithBlock { () -> Void in
// UI related task
}
NSOperationQueue 为您提供了设置任务之间依赖关系的简单方法。例如,您有 4 个任务,op1、op2、op3、op4。而你希望op1需要在op2之前完成,那么你可以这样写:
op2.addDependency(op1)
然后 op2 将在 op1 完成后被触发。由于 op3 和 op4 没有依赖关系,因此可以在 op2
之后完成 before/or