IOS單例模式

IOS單例模式(Singleton)單例模式的意思就是只有一個(gè)實(shí)例。單例模式確保某一個(gè)類(lèi)只有一個(gè)實(shí)例,而且自行實(shí)例化并向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。這個(gè)類(lèi)稱為單例類(lèi)。

1.單例模式的要點(diǎn):  顯然單例模式的要點(diǎn)有三個(gè);一是某個(gè)類(lèi)只能有一個(gè)實(shí)例;二是它必須自行創(chuàng)建這個(gè)實(shí)例;三是它必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例。

2.單例模式的優(yōu)點(diǎn):  一是實(shí)例控制:Singleton 會(huì)阻止其他對(duì)象實(shí)例化其自己的 Singleton 對(duì)象的副本,從而確保所有對(duì)象都訪問(wèn)唯一實(shí)例。  二是靈活性:因?yàn)轭?lèi)控制了實(shí)例化過(guò)程,所以類(lèi)可以更加靈活修改實(shí)例化過(guò)程 IOS中的單例模式

在objective-c中要實(shí)現(xiàn)一個(gè)單例類(lèi),至少需要做以下四個(gè)步驟:

1、為單例對(duì)象實(shí)現(xiàn)一個(gè)靜態(tài)實(shí)例,并初始化,然后設(shè)置成nil,

2、實(shí)現(xiàn)一個(gè)實(shí)例構(gòu)造方法檢查上面聲明的靜態(tài)實(shí)例是否為nil,如果是則新建并返回一個(gè)本類(lèi)的實(shí)例,

3、重寫(xiě)allocWithZone方法,用來(lái)保證其他人直接使用alloc和init試圖獲得一個(gè)新實(shí)力的時(shí)候不產(chǎn)生一個(gè)新實(shí)例,

4、適當(dāng)實(shí)現(xiàn)allocWitheZone,copyWithZone,release和autorelease。

下面以SurveyRunTimeData為例子:

?static SurveyRunTimeData *sharedObj = nil; //第一步:靜態(tài)實(shí)例,并初始化。@implementation SurveyRunTimeData+ (SurveyRunTimeData*) sharedInstance? //第二步:實(shí)例構(gòu)造檢查靜態(tài)實(shí)例是否為nil {? ??

@synchronized (self)? ? {? ? ? ??

if (sharedObj == nil)? ? ? ? {? ? ? ? ? ??

[[self alloc] init];? ? ? ??

}? ? }? ??

return sharedObj;

}

+ (id) allocWithZone:(NSZone *)zone //第三步:重寫(xiě)allocWithZone方法

{? ??

@synchronized (self) {? ? ? ?

?if (sharedObj == nil) {? ? ? ? ? ??

sharedObj = [super allocWithZone:zone];? ? ? ? ? ??

return sharedObj;? ? ? ??

}? ? }? ??

return nil;

}

- (id) copyWithZone:(NSZone *)zone //第四步{? ?

?return self;

}

- (id) retain{? ??

return self;

}

- (unsigned) retainCount{? ??

return UINT_MAX;

}

- (oneway void) release{?

?? }

- (id) autorelease{? ??

return self;

}- (id)init{? ??

@synchronized(self) {? ? ? ?

?[super init];//往往放一些要初始化的變量.? ? ? ??

return self;? ?

?}}

@end

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請(qǐng)通過(guò)簡(jiǎn)信或評(píng)論聯(lián)系作者。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容