Singleton模式經常來做應用程式層級的共用資源控制, 應該說這個模式的使用頻率非常高, 現在來看看在Objective-C裡面的實現方法.
要實現一個Singleton Class, 至少需要做以下四個步驟:
1. 為Singleton Object實現一個靜態執行個體, 初始化, 然後設定成nil.
2. 實現一個執行個體構造方法(通常命名為 sharedInstance 或者 sharedManager)檢查上面聲名的靜態執行個體是否為nil, 如果是則建立並返回一個本類執行個體.
3. 重寫 allocWithZone: 方法來保證當其他人直接使用 alloc 和 init 試圖獲得一個新執行個體的時候不會產生一個新的執行個體.
4. 適當的實現 copyWithZone:, release, retain, retainCount 和 autorelease.
下面是一個簡單的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
static MySingletonClass *sharedSingletonManager = nil; + (MySingletonClass*)sharedManager { @synchronized(self) { if (sharedSingletonManager == nil) { [[self alloc] init]; // assignment not done here } } return sharedSingletonManager; } + (id)allocWithZone:(NSZone *)zone { @synchronized(self) { if (sharedSingletonManager == nil) { sharedSingletonManager = [super allocWithZone:zone]; return sharedSingletonManager; // assignment and return on first allocation } } return nil; //on subsequent allocation attempts return nil } - (id)copyWithZone:(NSZone *)zone { return self; } - (id)retain { return self; } - (unsigned)retainCount { return UINT_MAX; //denotes an object that cannot be released } - (void)release { //do nothing } - (id)autorelease { return self; } |