iOS單例模式(單例類)

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

1.單例模式的要點:

顯然單例模式的要點有三個;一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。

2.單例模式的優點:

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

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

 

IOS中的單例模式

  在objective-c中要實現一個單例類,至少需要做以下四個步驟:
1、爲單例對象實現一個靜態實例,並初始化,然後設置成nil
2、實現一個實例構造方法檢查上面聲明的靜態實例是否爲nil,如果是則新建並返回一個本類的實例,
3、重寫allocWithZone方法,用來保證其他人直接使用allocinit試圖獲得一個新實力的時候不產生一個新實例,
4、適當實現allocWitheZonecopyWithZonereleaseautorelease

下面以SurveyRunTimeData爲例子:

 

static SurveyRunTimeData *sharedObj = nil; //第一步:靜態實例,並初始化。


@implementation SurveyRunTimeData
+ (SurveyRunTimeData*) sharedInstance  //第二步:實例構造檢查靜態實例是否爲nil    構造函數
{
    @synchronized (self)   //創建一個互斥鎖,保證此時沒有其它線程對self對象進行修改。
    {
        if (sharedObj == nil)
        {
            [[super alloc]init];
        }
    }
    return sharedObj;
}




+ (id) allocWithZone:(NSZone *)zone //第三步:重寫allocWithZone方法
{
    @synchronized (self) {
       
if (sharedObj ==nil) {
            sharedObj =[super allocWithZone:zone];
            returnsharedObj;
        }
    }
    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


最簡單的實現:

static id instance=nil;

@implementation singleleton

+(id)instance{

@synchronized (self)   //創建一個互斥鎖,保證此時沒有其它線程對self對象進行修改。

if(!instance){

instance=[[super alloc]init];

}

return instance;

}

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