天天看點

iOS單例模式(Singleton)

單例模式的意思就是隻有一個執行個體。單例模式確定某一個類隻有一個執行個體,而且自行執行個體化并向整個系統提供這個執行個體。這個類稱為單例類。

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

繼續閱讀