單例巫击,singleton Instance, 特點(diǎn):全局里獨(dú)一無二的,只有一個實(shí)例柄粹,只初始化一次喘鸟;
一般是兩種寫法匆绣,一個是GCD的寫法驻右,一個是普通的加鎖的寫法;
GCD寫法
+ (id)sharedInstance {
? ? staticInstance*sharedInstance =nil;
? ? staticdispatch_once_tonceToken;
? ? dispatch_once(&onceToken, ^{
? ? ? ? sharedInstance = [[Instancealloc]init];
? ? });
? ? returnsharedInstance;
}
+ (id)sharedInstance {
? ? staticInstance*sharedInstance =nil;
? ? staticdispatch_once_tonceToken;
? ? dispatch_once(&onceToken, ^{
? ? ? ? sharedInstance = [[Instancealloc]init];
? ? });
? ? returnsharedInstance;
}
onceToken默認(rèn)值是0崎淳,只有等于0的時候才會執(zhí)行大括號里的代碼(也就是初始化)堪夭,初始化操作執(zhí)行后,就會變成一個不為零的數(shù)拣凹,保證初始化一次森爽。
普通寫法
+ (id)sharedInstance {
? ? staticInstance*sharedInstance =nil;
? ? @synchronized (self) {
? ? ? ? if(sharedInstance ==nil) {
? ? ? ? ? ? sharedInstance = [[Instancealloc]init];
? ? ? ? }
? ? }
? ? returnsharedInstance;
}