本文转自:http://blog.codingmylife.com/?p=25
Singleton模式经常来做应用程序级别的共享资源控制, 应该说这个模式的使用频率非常高, 现在来看看在Objective-C里面的实现方法.
要实现一个Singleton Class, 至少需要做以下四个步骤:
1. 为Singleton Object实现一个静态实例, 初始化, 然后设置成nil.
2. 实现一个实例构造方法(通常命名为 sharedInstance 或者 sharedManager)检查上面声名的静态实例是否为nil, 如果是则新建并返回一个本类实例.
3. 重写 allocWithZone: 方法来保证当其他人直接使用 alloc 和 init 试图获得一个新实例的时候不会产生一个新的实例.
4. 适当的实现 copyWithZone:, release, retain, retainCount 和 autorelease.
下面是一个简单的例子:
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;
}
本文详细介绍了如何在Objective-C中实现单例模式。通过四个关键步骤:静态实例声明、构造方法实现、重写allocWithZone:方法以及适当实现copy等方法,确保了在整个应用程序中只存在一个实例。
243

被折叠的 条评论
为什么被折叠?



