在Objective-C中,使用單例模式,定義一個單例類的過程如下:
1、定義一個static的類對象,出事值為nil
2、在工廠方法中(一般都是以“sharedInstance”或者"sharedManager"命名),僅僅在第一步中聲明的static類對象為空的情況下,使用allocWithZone:方法創建一個新對象
3、重寫allocWithZone:方法
4、添加內存管理方法,以保證只會出現一個該類的實例。
下面是蘋果官方的demo示例:
- #import "MySingletonClass.h"
- @implementation MySingletonClass
- //1、聲明一個static類型的類對象
- static MySingletonClass *sharedGizmoManager = nil;
- //2、創建工廠方法
- + (MySingletonClass*)sharedManager
- {
- @synchronized(self){
- if (sharedGizmoManager == nil)
- <SPAN style="WHITE-SPACE: pre"> </SPAN>sharedGizmoManager = [[super allocWithZone:NULL] init];
- }
- return sharedGizmoManager;
- }
-
- //3、內存管理方法,以保證在內存中存在該對象時,內存計數器中,該對象的retainCount值始終為1
- + (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
- }
-
- - (id)autorelease
- {
- return self;
- }
-
- @end