單例對(duì)象實(shí)現(xiàn)方法:
//單例,顯然這里要用類方法獲取單例對(duì)象
+ (instancetype) sharedInstance
{
static Singleton * _instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance ;
}
注解:
-
static Singleton *_instance = nil
這里使用靜態(tài)變量是為了保證對(duì)象被創(chuàng)建后在整個(gè)程序生命周期內(nèi)不被釋放飞蛹。
-
+ (instancetype) sharedInstance;
顯然只能使用類方法。
-
static dispatch_once_t onceToken;
dispatch_once_t
是long類型间涵。因?yàn)閱卫龑?duì)象只能在整個(gè)程序結(jié)束后被釋放法竞,所以onceToken必須是static或global類型赋焕。
-
void dispatch_once(dispatch_once_t *predicate, dispatch_block_t block);
是同步函數(shù)参歹,函數(shù)會(huì)等待block里的操作都執(zhí)行完成才返回。這個(gè)函數(shù)有predicate
和block
兩個(gè)形參隆判。
-
predicate
是dispatch_once_t
類型的指針犬庇,用來測(cè)試傳入的block是否執(zhí)行完成。
-
block
是dispatch_block_t
類型的變量侨嘀,dispatch_block_t
是沒有參數(shù)沒有返回值的block類型臭挽。block
指向傳入的block對(duì)象,這個(gè)block在整個(gè)程序生命周期內(nèi)只會(huì)被執(zhí)行一次咬腕,block里執(zhí)行的操作是創(chuàng)建單例對(duì)象欢峰。
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者