background image

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 。