singleton模式非常常见,当某些类,只有一个对象时,就是单例模式,例如工具类和数据类,只能访问一个工具,或者某一个数据,
实现单例模式:
1、单例只有一个对象,所以要实现一个对象,初始化,然后设置为nil。
2、设置实现一个对象的方法,分配空间的方法,通常命名为sharedinstance或者sharedManager。在方法中判断对象是否为nil如果是就要创建内存空间,创建一个对象。
3、同时要重写allcWithZone:以免别人通过该方法进行对象的创建,产生新的对象。
4、实现copyWithZone release,retain ,retainCount和autorelease
static MySingleton *sharedInstance = nil;
+ (MySingleton *)sharedInstance {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [[MySingleton alloc] init];
}
}
return sharedInstance;
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
return sharedInstance; // assignment and return on first allocation
}
+ (id)allocWithZone:(NSZone *)zone {
@synchronized(self) {
if (sharedInstance == nil) {
sharedInstance = [super allocWithZone:zone];
return sharedInstance; // 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;
}
|
|