Swift的单例模式
Swift有两种方式实现单例模式
1、全局常量
let globalTool = Tool()
final class Tool {
fileprivate init() {
}
}
2、类型常量
final class Tool {
static let shared = Tool()
private init() {
}
}
处理单例模式的并发访问
1、多线程同时写
final class Tool {
static let shared = Tool()
private var data = [Int]()
// 创建串行队列
let serialQueue = DispatchQueue(label: "serialQueue")
private init() {
}
func add(item:Int) {
// Swift数组是线程不安全的。串行访问来并发保护
serialQueue.sync {
data.append(item)
}
}
}
2、多线程同时读和写
final class Tool {
static let shared = Tool()
private var data = [Int]()
// 创建并行队列
let concurrentQueue = DispatchQueue(label: "concurrentQueue",attributes: .concurrent)
private init() {
}
func add(item:Int) {
// 设立barrier让写数组操作单独执行。读-写-读
concurrentQueue.async(execute: DispatchWorkItem(flags: .barrier, block: {
self.data.append(item)
}))
}
func process() {
// 多线程同时读取数组不会造成并发问题
concurrentQueue.sync {
for item in data {
print(item)
}
}
}
}
如果觉得我的文章对您有用,请点击喜欢。您的支持将鼓励我继续创作!
大家有什么不懂或我哪里写错了都可以评论留言,我一定会回复的~
网友评论