運用場景:
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];
}