单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点。最初的定义出现于《设计模式》(Addision-Wesley,1994)
不太“严格”的单例的写法
static Singleton * singleton = nil;
+(id)shareSingleton
{
if(singleton == nil)
{
singleton = [[self alloc]init];
}
return singleton;
}
这是我们通常的写法,这种写法能通过其他的方法实例化单例对象,就可能创建多个单例的对象。在MRC中retain,release会引起不需要的引用计数增减
比较“严格”的单例的写法
static Singleton * singleton = nil;
+(id)shareSingleton
{
if(singleton == nil)
{
singleton = [[super allocWithZone:NULL]init];
}
return singleton;
}
+(id)allocWithZone:(struct _NSZone *)zone
{
return [[self shareSingleton] retain];
}
-(id)retain
{
return self;
}
-(NSUInteger)retainCount
{
return NSUIntegerMax;//不能释放的对象
}
-(oneway void)release
{
}
-(id)autorelease
{
return self;
}
+(id)alloc
{
return [self allocWithZone:NULL];
}
保证不会alloc创建对象,retain,releas,autorelease等保证单例在程序中不会被释放
如果想要实例化单例
Singleton * singleton = [NSAllocateObject ([Singleton class] , 0 , NULL) init];