第一种
@implementation Mooc
+ (id)sharedInstance
{
// 静态局部变量
static Mooc *instance = nil;
// 通过dispatch_once方式 确保instance在多线程环境下只被创建一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 创建实例
instance = [[super allocWithZone:NULL] init];
});
return instance;
}
// 重写方法【必不可少】
+ (id)allocWithZone:(struct _NSZone *)zone{
return [self sharedInstance];
}
// 重写方法【必不可少】
- (id)copyWithZone:(nullable NSZone *)zone{
return self;
}
- (id)mutableCopyWithZone:(NSZone *)zone {
return self;
}
@end
第二种写法
static XMGDownLoaderManager *_shareInstance;
+ (instancetype)shareInstance {
if (_shareInstance == nil) {
_shareInstance = [[self alloc] init];
}
return _shareInstance;
}
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
if (!_shareInstance) {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_shareInstance = [super allocWithZone:zone];
});
}
return _shareInstance;
}
- (id)copyWithZone:(NSZone *)zone {
return _shareInstance;
}
- (id)mutableCopyWithZone:(NSZone *)zone {
return _shareInstance;
}
网友评论