单例模式Singleton模式的简单特点
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。有一下特点
1.有一个私有的无参构造函数,这可以防止其他类实例化它,而且单例类也不应该被继承,如果单例类允许继承那么每个子类都可以创建实例,这就违背了Singleton模式“唯一实例”的初衷。
2.单例类被定义为sealed(密封的),就像前面提到的该类不应该被继承,所以为了保险起见可以把该类定义成不允许派生,但没有要求一定要这样定义。
3.一个静态的变量用来保存单实例的引用。
4.一个公有的静态方法用来获取单实例的引用,如果实例为null即创建一个。
/*********************************************************************
文件名称 :SingletonDemoTest.m
作 者 :好岸园技术学习网
网 址 : http://www.hopean.com
创建时间 : 12-11-7
文件描述 :
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
*********************************************************************/
#import"SingletonDemoTest.h"
@implementation SingletonDemoTest
staticSingletonDemoTest *sharedInstance;
/******************************************************************************
函数名称 : sharedInstance
函数描述 : 保证一个类仅有一个实例,并提供一个访问它的全局访问点。
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
+(id)sharedInstance{
/*
synchronized(self)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
*/
@synchronized(self){
if (sharedInstance== nil) {
sharedInstance = [[SingletonDemoTestallocWithZone:NULL]init];
}
}
return sharedInstance;
}
/******************************************************************************
函数名称 : allocWithZone
函数描述 : 重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实例的时候
不产生一个新实例
输入参数 :N/A
输出参数 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
+(id)allocWithZone:(NSZone *)zone{
/*
重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实例的时候不产生一个新实例
*/
@synchronized(self){
if (sharedInstance== nil) {
sharedInstance= [super allocWithZone:zone];
returnsharedInstance;
}
else{
NSLog(@"实例化对象");
}
}
return nil;
}
/******************************************************************************
函数名称 : init
函数描述 : 重写init方法,初始化数据
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
-(id)init{
self = [super init];
if(self !=nil){
NSLog(@"初始化数据");
}
return self;
}
/******************************************************************************
函数名称 : copyWithZone
函数描述 :重写copyWithZone方法,返回当前对象
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
- (id) copyWithZone:(NSZone*)zone
{
return self;
}
/******************************************************************************
函数名称 : retain
函数描述 : 重写retain方法,返回当前对象
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
- (id) retain
{
return self;
}
/******************************************************************************
函数名称 : retainCount
函数描述 :重写retainCount方法,返回引用计数
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
- (NSUInteger) retainCount
{
return NSUIntegerMax;
}
/******************************************************************************
函数名称 : release
函数描述 :重写release方法,此是release里do nothing
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
-(id)release
{
//
}
/******************************************************************************
函数名称 : autorelease
函数描述 :重写autorelease方法,初始化
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.hopean.com
******************************************************************************/
- (id) autorelease
{
return self;
}
@end