在 Objective-C 中单例的公认的写法类似下面这样:
@implementation MyManager
+ (id)sharedManager {
static MyManager * staticInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
staticInstance = [[self alloc] init];
});
return staticInstance;
}
@end
使用 GCD 中的 dispatch_once_t
可以保证里面的代码只被调用一次,以此保证单例在线程上的安全。
class MyManager {
static let sharedInstance = MyManager()
private init() {}
}
swift_once_block_invoke
中,以保证它的唯一性。