单例模式

2016-04-25  本文已影响10人  哈么么茶

可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源

在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)

单例模式在ARC\MRC环境下的写法有所不同,需要编写2套不同的代码
可以用宏判断是否为ARC环境

Paste_Image.png
  1. ARC中,单例模式的实现

    在.m中保留一个全局的static的实例

  static id _instance;

重写allocWithZone:方法,在这里创建唯一的实例(注意线程安全)


  + (id)allocWithZone:(struct _NSZone *)zone
  {
@synchronized(self) {
    if (!_instance) {
        _instance = [super allocWithZone:zone];
    }
}
return _instance;
  }

提供1个类方法让外界访问唯一的实例

  + (instancetype)sharedSoundTool{
@synchronized(self) {
    if (!_instance) {
        _instance = [[self alloc] init];
    }
}
return _instance;
  }

2,非ARC中(MRC),单例模式的实现(比ARC多了几个步骤)
实现copyWithZone:方法


  + (id)copyWithZone:(struct _NSZone *)zone{
return _instance;
  }

实现内存管理方法

  - (id)retain {
     return self;
    }

  - (NSUInteger)retainCount
   { 
    return 1;
    }

  - (oneway void)release 
  {
      }

  - (id)autorelease
   { 
     return self; 
   }
上一篇下一篇

猜你喜欢

热点阅读