iOS開發之單例

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:楓言楓語

關於單例的各種有效實現方法:單例模式實現

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章