单例模式在所有的面向对象的语言中都有哦涉及到,相信做为一个程序员的你,绝对不会陌生!
单例是指静态分配的实例,就是只开辟一块内存,不会重新开辟内存,这样就节省了内存!
单列模式的好处在这里不多讲了,这里主要介绍单列模式的完整实现:
在objective-c中要实现一个单例类,至少需要做以下四个步骤:
1、为单例对象实现一个静态实例,并初始化,然后设置成nil,
2、实现一个实例构造方法检查上面声明的静态实例是否为nil,如果是则新建并返回一个本类的实例,
3、重写allocWithZone方法,用来保证其他人直接使用alloc和init试图获得一个新实力的时候不产生一个新实例,
4、适当实现allocWitheZone,copyWithZone,release和autorelease。
下面以SurveyRunTimeData为例子:
static SurveyRunTimeData *sharedObj = nil; //第一步:静态实例,并初始化。
@implementation SurveyRunTimeData
-
(SurveyRunTimeData*) sharedInstance //第二步:实例构造检查静态实例是否为nil
{
@synchronized (self)
{if (sharedObj == nil) { [[self alloc] init]; }
}
return sharedObj;
} -
(id) allocWithZone:(NSZone *)zone //第三步:重写allocWithZone方法
{
@synchronized (self) {if (sharedObj == nil) { sharedObj = [super allocWithZone:zone]; return sharedObj; }
}
return nil;
} -
(id) copyWithZone:(NSZone *)zone //第四步
{
return self;
} -
(id) retain
{
return self;
} -
(unsigned) retainCount
{
return UINT_MAX;
} -
(oneway void) release
{
}
-
(id) autorelease
{
return self;
} -
(id)init
{
@synchronized(self) {[super init];//往往放一些要初始化的变量. return self;
}
}