iOS 之 GCD(1)
阿新 • • 發佈:2018-11-21
寫在前面的話:希望大家帶著批判的眼光,閱讀我的部落格。將不足和遺漏一一指出。
先來點實際的,專案中常用到的。(如有遺漏歡迎補充)
1.利用GCD進行延時操作。
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)( ① * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
②
});
說明
①: 這裡寫延時的時間,型別是double。(可以精確到零點幾秒)
②:這裡寫延遲時間後 要執行的程式碼。
2.利用GCD進行單例的宣告
#import "UserCenter.h"
static UserCenter * userCenter = nil;
@implementation UserCenter
+(UserCenter *)sharedInstance{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
userCenter = [[UserCenter alloc]init];
});
return userCenter;
}
@end
以上是.m的實現。
這裡我也把正常的單例宣告寫一下。
#import "UserCenter.h"
static UserCenter * userCenter = nil;
@implementation UserCenter
+(UserCenter *)sharedInstance{
@synchronized(self) {
if (!userCenter) {
userCenter = [[UserCenter alloc]init];
}
}
return userCenter;
}
@end
以上是正常單例.m的實現。
3.GCD開啟子執行緒,執行完回到主執行緒更新UI
dispatch_async(dispatch_get_global_queue(0 , 0), ^{
①
dispatch_async(dispatch_get_main_queue(), ^{
②
});
});
①: 在這裡寫需要在子執行緒中要執行的程式碼
②:子執行緒中執行完畢後 回到主執行緒更新UI。
首先,學習GCD之前我認為有必要了解一些東西。
Serial VS Concurrent (序列 vs. 併發)
這些術語描述當任務相對於其它任務被執行,任務序列執行就是每次只有一個任務被執行,任務併發執行就是在同一時間可以有多個任務被執行。
Synchronous VS Asynchronous (同步 vs 非同步)
一個同步函式只在完成了它預定的任務後才返回。
一個非同步函式,剛好相反,會立即返回,預定的任務會完成但不會等它完成。
因此,一個非同步函式不會阻塞當前執行緒去執行下一個函式。
未完待續。