iphone 单例模式的实现
创建类的唯一实例(普通单例)的函数示例
在很多时候,我们使用一个某个类的唯一实例。最常见的就是一个程序的主类。以下是以
名为
RootViewController 创建的一个单例函数:
static RootViewController *sharedRootController = nil;
+(RootViewController *) sharedController{
@synchronized(self)
{
if (sharedRootController == nil)
{
sharedRootController = [[[self alloc] init] autorelease];
}
}
return singleController;
}
+(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 。