单例就是该类在系统中只有一个实例,对比一下OC的单例创建方式来看一下Swift的单例是如何写的。
OC中的单例是这样的
+ (instancetype)shareManager
{
static id instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
onceToken默认等于0, 如果是0就会执行block, 如果不是0就不会执行,通常执行完之后就变为-1
类比一下OC,Swift中的单例也可以这样写
方法一
// 在Swift中, 类方法中是不允许定义静态变量的
static var once_t: dispatch_once_t = 0
static var instance: Manager?
/// 用于获取单例对象的类方法
class func shareManager() -> Manager{
dispatch_once(&once_t) { () -> Void in
instance = Manager()
}
return instance!
}
方法二
Swift中的let是线程安全的,有更简单创建单例的方法,这种方法更推荐。
static let instance: Manager = Manager()
class func shareManager() -> Manager {
return instance
}