运用场景:
1. 有一个全局的实例化的类方法
2. 保存在静态区,单例的生命周期和应用程序一样长
3. 内存中有且只有一个副本/对象/实例,指保存一份
用法:
1.GCD实现单利
+ (instancetype)sharedInstance {
static InstanceClass *_shareInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_shareInstance = [[super allocWithZone:NULL] init];
});
return _shareInstance;
}
2.静态变量实现单利
+ (instancetype)sharedInstance {
static InstanceClass *_shareInstance = nil;
@synchronized (self) {
if (!_shareInstance) {
_shareInstance = [[super allocWithZone:NULL] init];
}
}
return _shareInstance;
}
3.
+ (instancetype)sharedInstance {
static InstanceClass *_shareInstance = nil;
if (!_shareInstance) {
_shareInstance = [[super allocWithZone:NULL] init];
}
return _shareInstance;
}
上面方法和这个是对应的
+ (instancetype)allocWithZone:(struct _NSZone *)zone {
return [self sharedInstance];
}