我在iOS上編寫類似於工作線程或後臺線程的東西。每次有任務進入時,我都會把它放到後臺線程中。但問題是,我不想每次都使用這個dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});
,因爲它會使任務在不同的線程中運行,並且創建一個線程需要很多時間。如何在相同的全局隊列中添加後臺任務?
所以我的問題是如何使一個GCD隊列,並把它運行在相同的後臺線程,我會讓它運行回主線程結果出來時。
我在iOS上編寫類似於工作線程或後臺線程的東西。每次有任務進入時,我都會把它放到後臺線程中。但問題是,我不想每次都使用這個dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{});
,因爲它會使任務在不同的線程中運行,並且創建一個線程需要很多時間。如何在相同的全局隊列中添加後臺任務?
所以我的問題是如何使一個GCD隊列,並把它運行在相同的後臺線程,我會讓它運行回主線程結果出來時。
你似乎正在使用「線程」和「隊列」,就像它們是一樣的東西。他們不是。隊列是可以使用1個或多個實際線程實現的更高級別的抽象。
使用dispatch_get_global_queue
每次都可能會給你一個不同的隊列。所以你需要做的第一件事就是創建一個你使用的隊列,而不是每次都要求一個新的隊列。使用dispatch_queue_create
創建單個隊列。在適當的範圍內存儲對此的引用,以便您可以在任何需要它的地方引用它。
既然您只有一個隊列,您需要決定隊列是併發隊列還是串行隊列。一個串行隊列將只使用1個線程,而一個併發隊列可以使用多個線程。通過將適當的值傳遞給dispatch_queue_create
函數的attr
參數,可以獲得所需的隊列。
的Objective-C:
創建隊列:
dispatch_queue_t myQueue = dispatch_queue_create(@"my_global_queue", DISPATCH_QUEUE_CONCURRENT); // or use DISPATCH_QUEUE_SERIAL
使用隊列:
dispatch_async(myQueue, ^{
// code
});
斯威夫特:
創建隊列:
let myQueue = DispatchQueue(label: "my_global_queue") // serial
或:
let myQueue = DispatchQueue(label: "my_global_queue", attributes: .concurrent) // concurrent
使用隊列:
myQueue.async {
// code
}
十分感謝!我已經完成了我的代碼 –