iOS 單例模式

1、單例模式的意思就是隻有一個實例。單例模式確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例。這個類稱爲單例類。

2、單例模式的優點:

     1)實例控制:Singleton 會阻止其他對象實例化其自己的 Singleton 對象的副本,從而確保所有對象都訪問唯一實例。

   2)靈活性:因爲類控制了實例化過程,所以類可以更加靈活修改實例化過程

3、iOS中的單例模式
  在objective-c中要實現一個單例類,至少需要做以下四個步驟:
  1)爲單例對象實現一個靜態實例,並初始化,然後置成nil
  2)實現一個實例構造方法檢查上面聲明的靜態實例是否爲nil,如果是則新建並返回一個本類的實例
  3)重寫allocWithZone方法,用來保證其他人直接使用alloc和init試圖獲得一個新實力的時候不產生一個新實例
     4)適當實現copyWithZone,release和autorelease
下面以SurveyRunTimeData爲例子:
static SurveyRunTimeData *sharedObj = nil; //第一步:靜態實例,並初始化。
@implementation SurveyRunTimeData
+ (SurveyRunTimeData*) sharedInstance  //第二步:實例構造檢查靜態實例是否爲nil
{
  @synchronized (self) {
      if (sharedObj == nil) {
           sharedObj = [[self alloc] init];
      }
   }
   return sharedObj;
}

+ (id) allocWithZone:(NSZone *)zone //第三步:重寫allocWithZone方法
{
  @synchronized (self) {
       if (sharedObj == nil) {
           sharedObj = [super allocWithZone:zone]; 
         }
      }
      return sharedObj;
}

- (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

轉自 http://blog.csdn.net/Dwarven/article/details/23830069

發佈了27 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章