iOS 的 Singleton 单例模式

设计模式./-->是一种手段,一种工具.可以使代码的写起来更方便
1. 代理设计模式(委托设计模式)

<1>. 监听器的场合

  对象B(保姆)想监听对象A(婴儿)的一些行为

<2>. 通知的场合

  对象A(婴儿)发生了一些行为,想通知B(保姆)[B(保姆)为代理对象]

<3>. 有些事情,不想自己处理,可以交给别人处理

  对象婴儿发生了一些事情,不想自己处理,交给保姆处理

2. 代理设计模式的使用场合

  当对象A发生了一些行为,想告知对象B-->[让对象B成为对象A的代理对象]

  对象B想监听对象A的一些行为-->[让对象B成为对象A的代理对象]

  当对象A无法处理某些行为的时候,想让对象B帮忙处理-->[让对象B成为对象A的代理对象]

2. 单例设计模式

可以保证某个类创建出来的对象只有一个

作用是: 节省内存开销

    如果有一些数据,整个程序都用的上,只需要使用同一份资源.(保证大家访问的数据是相同的,是一致的)

    一般来说.工具类设计为单例模式.

实现:

非ARC模式:

static GMTool * _gmtool = nil;

+ (instancetype) allocWithZone:(struct _NSZone *) zone

{

  if (_gmtool == nil){

      static dispatch_once_t onceToken;

      dispatch_once(&onceToken, ^{_gmtool = [super allocWithZone: zone;];});       

    }

return _gmtool;

}

- (oneway void) release{} //保证对象不被销毁

-(id ) retain{ return self; }

- (NSInteger) retainCount{ return 1;}

- (id ) init

{ if(_gmtool == nil)

static dispatch_once_t onceToken;

      dispatch_once(&onceToken, ^{ _gmtool  = [super init];  return _gmtool;});           

 }

+ (instancetype) shareGMTool

{

  return  [[self alloc]init];

}

ARC模式:    -fobjc-arc

static GMTool * _gmtool = nil;

+ (instancetype) allocWithZone:(struct _NSZone *) zone

{

  if (_gmtool == nil){

      static dispatch_once_t onceToken;

      dispatch_once(&onceToken, ^{_gmtool = [super allocWithZone: zone;];});       

    }

return _gmtool;

}

- (id ) init

{ if(_gmtool == nil)

static dispatch_once_t onceToken;

      dispatch_once(&onceToken, ^{ _gmtool  = [super init];  return _gmtool;});           

 }

+ (instancetype) shareGMTool

{

  return  [[self alloc]init];

}

UIApplication shareApplication

NSUserDefaults standard

UIDevice currentdevice

NSFileManager defaultmanager

 

posted @ 2016-01-10 20:18  aunty_m  阅读(130)  评论(0编辑  收藏  举报