一:从异步线程切换主线程
//Async to append block.
DispatchQueue.global(qos: .default).async {
// Deal with time-consuming tasks here.
var para_3: Int = 0;
para_3 = para_3 + 1;
NSLog("Executed OK. And Parametermn is :\(para_3)");
// When time-consuming tasks finished, process this task in the main thread.
DispatchQueue.main.async {
var para_3: Int = 0;
para_3 = para_3 + 1;
NSLog("Executed OK. And Parametermn is :\(para_3)");
}
}
说明:global
下面紧跟着的就是耗时操作,例如网络请求,大量复杂的运算等;main
内则回到了主线程,这里可以更新UI。GCD提供的这种方式非常类似于 Android里面的匿名类然后调用runOnUiThread()
的写法。
二:延时线程
// Create a delay task.
let delayTask = DispatchWorkItem {
var para_3: Int = 0;
para_3 = para_3 + 1;
NSLog("Executed OK. And Parametermn is :\(para_3) Last.");
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime .now() + 5.0, execute: delayTask);
delayTask.cancel();
说明:这里Swift不如Java那样拥有一个Timer那么方便,但也能正常使用。这里先创建一个延时任务,然后放到主线程里面执行。执行的参数第一个为要延迟触发的时间,第二个为要执行的任务。每个延迟任务都有一个cancel()
方法供与取消。
三:创建串行与并行队列
// Create a serial queue.
let mySerial = DispatchQueue(label: "SerialOne");
mySerial.async {
var para_1: Int = 0;
para_1 = para_1 + 1;
NSLog("Executed OK. And Parametermn is :\(para_1)");
}
// Create a concurrent queue.
let myConcurrent = DispatchQueue(label: "ConcurrentOne", attributes: .concurrent);
myConcurrent.async {
var para_2: Int = 0;
para_2 = para_2 + 1;
NSLog("Executed OK. And Parametermn is :\(para_2)");
}
说明:使用DispatchQueue
不加以说明默认就是串行队列;使用attributes
的.concurrent
属性就是并行队列。