单例是指静态分配的实例,而 iphone sdk 中满是这种实例,例如
[UIApplication sharedApplication] 回来一个指向代表应用程序的单例目标的指针。[UIDevice currentDevice] 获取一个代表一切运用硬件渠道的目标。
将类办法与单例相结合,便能够在程序的任何地方拜访静态实例,而无需运用指向目标的指针或保存它的实例变量。创立类的仅有实例(一般单例)的函数示例:
//在许多时分,咱们运用某个类的仅有实例。最常见的便是一个程序的主类,以下是以名为 RootViewController 创立的一个单例函数:
static RootViewController *sharedRootController = nil;
+(RootViewController *) sharedController{
@synchronized(self)
{
if (sharedRootController == nil)
{
sharedRootController = [[[self alloc] init] autorelease];
}
}
return sharedRootController;
}
+(id) allocWithZone:(NSZone *)zone
{
@synchronized(self)
{
if (sharedRootController == nil)
{
sharedRootController = [super allocWithZone:zone];
return sharedRootController;
}
}
return nil;
}
代码阐明:
1、synchronized 这个主要是考虑多线程的程序,这个指令能够将{ } 内的代码约束在一个线程履行,假如某个线程没有履行完,其他的线程假如需求履行就得等着。
2、网上查找的代码,如同有一个没有参加 autorelease,我觉得应该需求加。由于假如调用的函数没有release就麻烦了(我觉得,iOS 上的程序,关于创立用于函数回来值的,都应该考虑 autorelease)。
3、allocWithZone 这个是重载的,由于这个是从拟定的内存区域读取信息创立实例,所以假如需求的单例已经有了,就需求制止修正当时单例,所以回来 nil。