普通的写法:
class SwiftSingleton {
class var shared: SwiftSingleton {
if !Inner.instance {
Inner.instance = SwiftSingleton()
}
returnInner.instance!
}
structInner {
staticvar instance: SwiftSingleton?
}
}
但系统多个线程在执行,这种情况下就会创建多个实例,没有保证实例的唯一性。也可以修改成另外一种方式:
class SwiftSingleton { classvar shared: SwiftSingleton { returnInner.instance } struct Inner { static let instance: SwiftSingleton = SwiftSingleton() } } |
首次访问Inner.instance时才会创建SwiftSingleton,不会创建多个对象,但是这样返回对象是想修改重新获取也不好操作。
因此可以使用GCD来实现:
class SwiftSingleton {
classvar shared: SwiftSingleton {
dispatch_once(&Inner.token) {
Inner.instance = SwiftSingleton()
}
return Inner.instance!
}
struct Inner {
static var instance: SwiftSingleton?
static var token: dispatch_once_t = 0
}
}
时间: 2024-08-04 20:07:47