1、首先,我们来了解一下什么是单例模式?单例模式是在整个应用程序中只被初始化一次,且是该类的唯一的实例。它的优点:易于外界访问;费时省内存;线程安全。缺点:责任过重;不易扩展;长时间未使用,系统会回收,导致对象的状态丢失。
2、代码如下:
static XXXClass *_instance = nil;
+ (instancetype)shareInstance {
if (!_instance) {
_instance = [[super alloc] init];
}
return _instance;
}
//调用alloc方法时,OC内部会调用allocWithZone这个方法来申请内存,此时我们可重写此方法。
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
static dispatch_once_t onceToken;
//保证只初始化一次
dispatch_once(&onceToken, ^{
if (!_instance) {
_instance = [super allocWithZone:zone];
}
});
return _instance;
}
- (id)copy {
return _instance;
}
- (id)mutableCopy {
return _instance;
}
最后,为什么我们需要创建安全的单例模式呢?那是因为防止外部通过alloc和init以及copy来构造对象这种现象。
参考链接:https://blog.csdn.net/Nirvana_666/article/details/51854463
https://www.jianshu.com/p/d07298613f86
http://blog.jimmyis.in/dispatch_once/
网友评论