自己编写的Objective-c的singleton单例实例
2012-11-22 11:12
471 查看
单例模式Singleton模式的简单特点
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。有一下特点
1.有一个私有的无参构造函数,这可以防止其他类实例化它,而且单例类也不应该被继承,如果单例类允许继承那么每个子类都可以创建实例,这就违背了Singleton模式“唯一实例”的初衷。
2.单例类被定义为sealed(密封的),就像前面提到的该类不应该被继承,所以为了保险起见可以把该类定义成不允许派生,但没有要求一定要这样定义。
3.一个静态的变量用来保存单实例的引用。
4.一个公有的静态方法用来获取单实例的引用,如果实例为null即创建一个。
/*********************************************************************
文件名称 :SingletonDemoTest.m
作 者 :好岸园技术学习网
网 址 :http://www.wahenzan.com
创建时间 : 12-11-7
文件描述 :
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
*********************************************************************/
#import"SingletonDemoTest.h"
@implementation SingletonDemoTest
staticSingletonDemoTest *sharedInstance;
/******************************************************************************
函数名称 : sharedInstance
函数描述 :保证一个类仅有一个实例,并提供一个访问它的全局访问点。
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.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.wahenzan.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.wahenzan.com
******************************************************************************/
-(id)init{
self = [super init];
if(self !=nil){
NSLog(@"初始化数据");
}
return self;
}
/******************************************************************************
函数名称 : copyWithZone
函数描述 :重写copyWithZone方法,返回当前对象
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (id) copyWithZone:(NSZone*)zone
{
return self;
}
/******************************************************************************
函数名称 : retain
函数描述 :重写retain方法,返回当前对象
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (id) retain
{
return self;
}
/******************************************************************************
函数名称 : retainCount
函数描述 :重写retainCount方法,返回引用计数
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (NSUInteger) retainCount
{
return NSUIntegerMax;
}
/******************************************************************************
函数名称 : release
函数描述 :重写release方法,此是release里do nothing
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
-(id)release
{
//
}
/******************************************************************************
函数名称 : autorelease
函数描述 :重写autorelease方法,初始化
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (id) autorelease
{
return self;
}
@end
单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。有一下特点
1.有一个私有的无参构造函数,这可以防止其他类实例化它,而且单例类也不应该被继承,如果单例类允许继承那么每个子类都可以创建实例,这就违背了Singleton模式“唯一实例”的初衷。
2.单例类被定义为sealed(密封的),就像前面提到的该类不应该被继承,所以为了保险起见可以把该类定义成不允许派生,但没有要求一定要这样定义。
3.一个静态的变量用来保存单实例的引用。
4.一个公有的静态方法用来获取单实例的引用,如果实例为null即创建一个。
/*********************************************************************
文件名称 :SingletonDemoTest.m
作 者 :好岸园技术学习网
网 址 :http://www.wahenzan.com
创建时间 : 12-11-7
文件描述 :
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
*********************************************************************/
#import"SingletonDemoTest.h"
@implementation SingletonDemoTest
staticSingletonDemoTest *sharedInstance;
/******************************************************************************
函数名称 : sharedInstance
函数描述 :保证一个类仅有一个实例,并提供一个访问它的全局访问点。
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.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.wahenzan.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.wahenzan.com
******************************************************************************/
-(id)init{
self = [super init];
if(self !=nil){
NSLog(@"初始化数据");
}
return self;
}
/******************************************************************************
函数名称 : copyWithZone
函数描述 :重写copyWithZone方法,返回当前对象
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (id) copyWithZone:(NSZone*)zone
{
return self;
}
/******************************************************************************
函数名称 : retain
函数描述 :重写retain方法,返回当前对象
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (id) retain
{
return self;
}
/******************************************************************************
函数名称 : retainCount
函数描述 :重写retainCount方法,返回引用计数
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (NSUInteger) retainCount
{
return NSUIntegerMax;
}
/******************************************************************************
函数名称 : release
函数描述 :重写release方法,此是release里do nothing
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
-(id)release
{
//
}
/******************************************************************************
函数名称 : autorelease
函数描述 :重写autorelease方法,初始化
输入参数 :N/A
输出参数 :N/A
返回值 :N/A
作 者 : 好岸园技术学习网
网 址 : http://www.wahenzan.com
******************************************************************************/
- (id) autorelease
{
return self;
}
@end
相关文章推荐
- 自己编写的Objective-c的singleton单例实例
- 编写自己的代码库(javascript常用实例的实现与封装)
- 编写自己的代码库(javascript常用实例的实现与封装)
- 手把手编写自己的 PHP MVC 框架实例教程
- PHP: 手把手编写自己的 MVC 框架实例教程
- 编写自己的代码库(javascript常用实例的实现与封装)
- 编写自己的第一个Hadoop实例
- 手把手编写自己的PHP MVC框架实例教程
- 手把手编写自己的PHP MVC框架实例教程
- Swift调用Objective-C编写的API实例
- 编写自己的代码库(javascript常用实例的实现与封装)
- Zookeeper.NET Client (一)【自己编写客户端 连接实例】
- 编写自己的代码库(javascript常用实例的实现与封装)
- C++自己编写头文件类与函数的调用(超简单实例)
- 工程中编写自己的makefile---2 实例
- 编写Java的(单例模式)单实例Singleton 的示例
- 手把手编写自己的PHP MVC框架实例教程
- 周末班补充视频Scala第2课:动手编写和运行自己的第一个Scala函数式编程的实例.
- 手把手编写自己的PHP MVC框架实例教程
- 编写自己的代码库(javascript常用实例的实现与封装)