iphone单例模式(singleton)的实现

鉴客 发布于 2011/12/12 09:29
阅读 151
收藏 0

创建类的唯一实例(普通单例)的函数示例      

在很多时候,我们使用一个某个类的唯一实例。最常见的就是一个程序的主类。以下是以名为 RootViewController 创建的一个单例函数:
    static RootViewController *sharedRootController = nil;
 

    +(RootViewController *) sharedController{
 
      @synchronized(self)
     {
    
       if (sharedRootController == nil)
       {
         
         sharedRootController = [[[self alloc] init] ];
      
        }
  
      }
   
      return singleController;

    }

    +(id) allocWithZone:(NSZone *)zone
    {
  
          @synchronized(self)
    {
      
     if (sharedRootController == nil)
     {
            sharedRootController = [super allocWithZone:zone];
    
           return sharedRootController;
     
      }
  
     }
  
     return nil;
}
    - (id)copyWithZone:(NSZone *)zone
    {
        return self;
    }
    - (id)retain
    {
        return self;
    }
    - (unsigned)retainCount
    {
        return UINT_MAX;  //denotes an object that cannot be released
    }
    - (void)release
    {
        //do nothing
    }
    - (id)autorelease
    {
        return self;
    }

代码说明:

1. synchronized   这个主要是考虑多线程的程序,这个指令可以将{ } 内的代码限制在一个线程执行,如果某个线程没有执行完,其他的线程如果需要执行就得等着。
2.autorelease 要不要加!(觉得不加也可以!)
3. allocWithZone 这个是重载的,因为这个是从制定的内存区域读取信息创建实例,所以如果需要的单例已经有了,就需要禁止修改当前单例。所以返回 nil
加载中
返回顶部
顶部