3.2.12 dispatch_once
dispatch_once 函數(shù)是保證在應(yīng)用程序執(zhí)行中執(zhí)行一次指定處理的API骑疆。下面這種經(jīng)常出現(xiàn)的用來進行初始化的源代碼可通過dispatch_once函數(shù)簡化。
static int initialized = NO;
if (initialized == NO) {
/**
初始化
*/
initialized = YES;
}
如果使用dispatch_once 函數(shù)泊柬,則源碼寫為:
static dispatch_once_t pred;
dispatch_once(&pred, ^{
/**
初始化
*/
});
源代碼看起來沒有太大變化,但是通過dispatch_once函數(shù)状答,該源碼即使在多線程環(huán)境下執(zhí)行闸氮,也可保證百分之百安全。
之前的源代碼字大多數(shù)情況下也是安全的译断。但是在多核CPU中或悲,在正在更新表示是否初始化的標志變量時讀取,就有可能多次執(zhí)行初始化處理翎蹈。而使用dispatch_once函數(shù)初始化就不必擔(dān)心這樣的問題男公。這就是所說的單利模式,在生成單例對象時使用枢赔。