如何使用线程在迅速?
dispatchOnMainThread:^{
NSLog(@"Block Executed On %s", dispatch_queue_get_label(dispatch_get_current_queue()));
}];
如何使用线程在迅速?
dispatchOnMainThread:^{
NSLog(@"Block Executed On %s", dispatch_queue_get_label(dispatch_get_current_queue()));
}];
当前回答
斯威夫特5
为了简化,创建一个“DispatchQueue+Extensions.swift”文件,内容如下:
import Foundation
typealias Dispatch = DispatchQueue
extension Dispatch {
static func background(_ task: @escaping () -> ()) {
Dispatch.global(qos: .background).async {
task()
}
}
static func main(_ task: @escaping () -> ()) {
Dispatch.main.async {
task()
}
}
}
用法:
Dispatch.background {
// do stuff
Dispatch.main {
// update UI
}
}
其他回答
由于OP问题已经在上面得到了回答,我只想添加一些速度方面的考虑:
我不建议使用.background线程优先级运行任务,尤其是在iPhone X上,因为任务似乎是分配在低功耗内核上的。
下面是一个计算密集型函数的一些真实数据,该函数从XML文件中读取(带缓冲)并执行数据插值:
设备名/ .background / .utility / .default / .userInitiated / .userInteractive
iPhone X: 18.7s / 6.3s / 1.8s / 1.8s iPhone 7: 4.6s / 3.1s / 3.0s / 2.8s / 2.6s iPhone 5s: 7.3s / 6.1s / 4.0s / 4.0s / 3.8s
注意,并不是所有设备的数据集都相同。iPhone X最大,iPhone 5s最小。
来自Jameson Quave的教程
斯威夫特2
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), {
//All stuff here
})
在我们的iOS应用中,中央调度是用来处理多任务的。
您可以使用此代码
// Using time interval
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+1) {
print("Hello World")
}
// Background thread
queue.sync {
for i in 0..<10 {
print("Hello", i)
}
}
// Main thread
for i in 20..<30 {
print("Hello", i)
}
更多信息请访问这个链接:https://www.programminghub.us/2018/07/integrate-dispatcher-in-swift.html
多用途螺纹功能
public enum QueueType {
case Main
case Background
case LowPriority
case HighPriority
var queue: DispatchQueue {
switch self {
case .Main:
return DispatchQueue.main
case .Background:
return DispatchQueue(label: "com.app.queue",
qos: .background,
target: nil)
case .LowPriority:
return DispatchQueue.global(qos: .userInitiated)
case .HighPriority:
return DispatchQueue.global(qos: .userInitiated)
}
}
}
func performOn(_ queueType: QueueType, closure: @escaping () -> Void) {
queueType.queue.async(execute: closure)
}
像这样使用它:
performOn(.Background) {
//Code
}
在Swift 4.2中,这是可行的。
import Foundation
class myThread: Thread
{
override func main() {
while(true) {
print("Running in the Thread");
Thread.sleep(forTimeInterval: 4);
}
}
}
let t = myThread();
t.start();
while(true) {
print("Main Loop");
sleep(5);
}