單例模式的意思就是隻有一個執行個體。單例模式確定某一個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。這個類稱為單例類。
1.單例模式的要點:
顯然單例模式的要點有三個;一是某個類隻能有一個執行個體;二是它必須自行建立這個執行個體;三是它必須自行向整個系統提供這個執行個體。
2.單例模式的優點:
1.執行個體控制:Singleton 會阻止其他對象執行個體化其自己的 Singleton 對象的副本,進而確定所有對象都通路唯一執行個體。
2.靈活性:因為類控制了執行個體化過程,是以類可以更加靈活修改執行個體化過程
iOS中的單例模式
在objective-c中要實作一個單例類,至少需要做以下四個步驟:
1、為單例對象實作一個靜态執行個體,并初始化,然後設定成nil,
2、實作一個執行個體構造方法檢查上面聲明的靜态執行個體是否為nil,如果是則建立并傳回一個本類的執行個體,
3、重寫allocWithZone方法,用來保證其他人直接使用alloc和init試圖獲得一個新實力的時候不産生一個新執行個體,
4、适當實作allocWitheZone,copyWithZone,release和autorelease。
下面以SurveyRunTimeData為例子:
static SurveyRunTimeData *sharedObj = nil; //第一步:靜态執行個體,并初始化。
@implementation SurveyRunTimeData
+ (SurveyRunTimeData*) sharedInstance //第二步:執行個體構造檢查靜态執行個體是否為nil
{
@synchronized (self)
{
if (sharedObj == nil)
{
[[self alloc] init];
}
}
return sharedObj;
}
+ (id) allocWithZone:(NSZone *)zone //第三步:重寫allocWithZone方法
@synchronized (self) {
if (sharedObj == nil) {
sharedObj = [super allocWithZone:zone];
return sharedObj;
return nil;
- (id) copyWithZone:(NSZone *)zone //第四步
return self;
- (id) retain
- (unsigned) retainCount
return UINT_MAX;
- (oneway void) release
- (id) autorelease
- (id)init
@synchronized(self) {
[super init];//往往放一些要初始化的變量.
return self;
@end