Please enable JavaScript.
Coggle requires JavaScript to display documents.
多工任務 (執行緒Thread (主執行緒
背景執行緒 (GCD (dispatch_async
非同步 (讓好幾件工作都在背景執行,而每件工作…
多工任務
執行緒Thread
主執行緒
背景執行緒
-
dispatch_async
非同步
讓好幾件工作都在背景執行,而每件工作並非平行執行,而是一件工作做完之後,再繼續下一件
dispatch_queue_t serialQueue = dispatch_queue_create("com.kkbox.queue", DISPATCH_QUEUE_SERIAL);
dispatch_async(serialQueue, ^{ [someObject doSomethingHere]; });
dispatch_async(serialQueue, ^{ [someObject doSomethingHereAsWell]; });
先讓某個工作在背景執行,執行完畢之後,再繼續在 main thread 更新 UI,讓用戶知道這件工作已經執行完畢
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[someObject doSomethingInBackground];
dispatch_async(dispatch_get_main_queue(), ^{
[someObject doSomethingOnMainThread];
已經在背景了,想要在 main thread 執行工作
dispatch_async(dispatch_get_main_queue(), ^{
[someObject doSomethingHere];
在前景,但是想要在背景執行一件工作
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[someObject doSomethingHere]; :<3:
-
-
dispatch_after
延後執行某個 block 在某個指定的 dispatch queue 上執行,我們可以用這個 function 代替 timer
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)),dispatch_get_main_queue(),
^{ [someObject doSomething];});