单例模式
2016-04-25 本文已影响10人
哈么么茶
-
单例模式的作用
可以保证在程序运行过程,一个类只有一个实例,而且该实例易于供外界访问,从而方便地控制了实例个数,并节约系统资源
-
单例模式的使用场合
在整个应用程序中,共享一份资源(这份资源只需要创建初始化1次)
单例模式在ARC\MRC环境下的写法有所不同,需要编写2套不同的代码
可以用宏判断是否为ARC环境
-
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;
}