iOS设计模式之单例


IOS设计模式之单例模式

        单例在我们的日常开发中经常会遇见,是一种较为常见的设计模式,所谓单例模式,顾名思义就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并

向整个系统提供这个实例。这个类称为单例类。

        下面我们看看在在各种情况下单例的实现方式。

1  MRC(iOS5以前):

#import <Foundation/Foundation.h>

@interface Singleton : NSObject  

+(Singleton *) instance;

@end  @implementation Singleton

+(Singleton *) instance

 {       static Singleton *sharedSingleton_ = nil;   

         @synchronized(self)

          {  if(sharedSingleton_ == nil)

             { 

               sharedSingleton_ = [NSAllocateObject([self class], 0, NULL) init];

              }  

         } 

         return sharedSingleton_; 

 + (id) allocWithZone:(NSZone *)zone 

{   

return [[self sharedInstance] retain]; 

 - (id) copyWithZone:(NSZone*)zone

{   

return self; 

 - (id) retain 

  return self;

 - (NSUInteger) retainCount 

{   

return NSUIntegerMax;  

}  

-(void)release

 {   

[super release];

 } 

 - (id) autorelease 

{   

return self; 

}  

@end

注意:MRC条件下实现单例需要实现他的allocWithZone、copyWithZone方法,以确保无论是以哪种方式创建的对象返回的实例都只有一个。

2   ARC(ios5以后)

ios5以后,由于引进了ARC技术,使得单例模式的实现变得更为简便。

static RootViewController* sharedRootController = nil; 

+(RootViewController *) sharedController

{  @synchronized(self)

    {  if (sharedRootController == nil)

        {  

            sharedRootController = [[self alloc] init];       

        }   

     }    return  singleController;

}

现在iOS5之后普遍使用了ARC技术,原来这个写法就显得很累赘了,release已经不使用了。


3    结合GCD来实现单例模式:

ios5以后,由于GCD的引入,使得单例又有了新的实现方式,为开发者日常开发提供便捷

+ (id)sharedInstance  

{  

 static dispatch_once_t pred = 0;  

  __strong static id _sharedObject = nil;  

  dispatch_once(&pred, ^{  

      _sharedObject = [[self alloc] init]; // or some other init method  

 });  

return _sharedObject;  

}   

使用dispatch_once,这个方法的意思是在应用程序生命周期内,这方法只执行一次,这就是ARC下结合GCD的一个单例的代码

好了,以上就是单例模式的各种实现方式,如果需要看代码的实现方式,这里附有链接,是我上传至Code4app的一个Demo

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值