標籤:style blog color 使用 os io strong ar
單例模式的意思就是只有一個執行個體。單例模式確保某一個類只有一個執行個體,而且自行執行個體化並向整個系統提供這個執行個體。這個類稱為單例類。
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{ return self;}- (unsigned) retainCount{ return UINT_MAX;}- (oneway void) release{ }- (id) autorelease{ return self;}- (id)init{ @synchronized(self) { [super init];//往往放一些要初始化的變數. return self; }}@end
ps: 用gcd替換@synchronized方式,既能提高效率,又能自動適配多核cpu問題