【发布时间】:2022-07-06 18:23:47
【问题描述】:
我从 Crashlytics 收到报告说,当应用程序在 getter 中执行到 safeQueue.sync 时,经常会发生崩溃。
此队列用于保护线程不安全数组的访问。
崩溃类型是EXC_BAD_ACCESS KERN_PROTECTION_FAILURE,但是我不明白为什么这行代码会导致内存访问问题。
private let safeQueue = DispatchQueue(label: "contact.manager.safe.queue", attributes: .concurrent)
private var _allContacts = [Contact]()
private(set) var allContacts: [Contact] {
get {
safeQueue.sync {
_allContacts
}
}
set {
safeQueue.async(flags: .barrier) { [weak self] in
self?._allContacts = newValue
}
}
}
【问题讨论】:
-
你为什么使用同步?如果您删除队列并正常进行会发生什么
标签: ios swift debugging concurrency grand-central-dispatch