我想知道是否在 NSLock
和 willSet
中使用了 didSet
保护多线程写作的属性是一种可行的解决方案。
类似的东西:
private let lock = NSLock()
private static var cachedUserTokenDetails: UserTokenDetails? {
willSet {
lock.lock()
}
didSet {
lock.unlock()
}
}
class func getUserTokenDetails() -> UserTokenDetails? {
if cachedUserTokenDetails == nil {
cachedUserTokenDetails = getUserTokenDetailsFromKeychain()
}
return cachedUserTokenDetails
}
我认为这是安全的,因为永远会调用willSet
和didSet
,对吧?