iOS開發中的單例模式(singleton)是指一個類只有一個實例,單例模式確保一個類只有一個實例,自行實例化並且向整個系統提供這個實例。我們把按照上述標準實現的類稱之爲單例類。
1. 常見的單例
有幾個Cocoa框架類是按照這種模式實現的,他們包括:NSFileManager、NSWorkspace、UIApplication、UIAccelerometer等。
2. 單例模式的要點
顯然單例模式的要點有三個:一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。
3.單例模式的優點
1.實例控制:Singleton 會阻止其他對象實例化其自己的 Singleton 對象的副本,從而確保所有對象都訪問唯一實例。
2.靈活性:因爲類控制了實例化過程,所以類可以更加靈活修改實例化過程
4.單例的實現
在objective-c中要實現一個單例類,至少需要做以下四個步驟:
1、爲單例對象實現一個靜態實例,並初始化,然後設置成nil,
2、實現一個實例構造方法檢查上面聲明的靜態實例是否爲nil,如果是則新建並返回一個本類的實例,
3、重寫allocWithZone方法,用來保證其他人直接使用alloc和init試圖獲得一個新實力的時候不產生一個新實例,
4、適當實現allocWitheZone,copyWithZone,release和autorelease
5.代碼的實現
static MyGizmoClass *sharedGizmoManager = nil;
+ (MyGizmoClass*)sharedManager
{
if (sharedGizmoManager == nil) {
sharedGizmoManager = [[super allocWithZone:NULL] init];
}
return sharedGizmoManager;
}
+ (id)allocWithZone:(NSZone *)zone
{
return [[self sharedManager] retain];
}
- (id)copyWithZone:(NSZone *)zone
{
return self;
}
- (id)retain
{
return self;
}
- (NSUInteger)retainCount
{
return NSUIntegerMax; //denotes an object that cannot be released
}
- (void)release
{
//do nothing
}
- (id)autorelease
{
return self;
}
6.增加一些討論
關於代碼中的allocWithZone:楓言楓語。
關於單例的各種有效實現方法:單例模式實現。