单例写法
在OC中,我们通常是采用dispatch_once函数来帮助我们实现单例。dispatch_once可以保证马上执行函数并且线程安全。
+ (instancetype)sharedInstance {
static id _instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_instance = [[self alloc] init];
});
return _instance;
}
在Swift中,可以使用static来修饰一个类型属性,这样的话保证了只会进行一次的延迟实例化并且是线程安全的。
class Singleton {
static let sharedInstance = Singleton()
}
如果你想要在初始化的时候设置其他属性的话,也可以使用下面的方法
class Singleton {
static let sharedInstance: Singleton = {
let instance = Singleton()
// setup code
return instance
}()
}
参考链接: