gpt4 book ai didi

swift - 解决 iOS Swift 中的数据争用

转载 作者:搜寻专家 更新时间:2023-10-31 08:30:04 25 4
gpt4 key购买 nike

我有 NetworkProvider,它会连续进行 API 调用,而且一旦我收到数据,我就会更新用户 ID。同时我将从其他功能访问用户标识。

这是数据竞争条件,有人可以帮助消除该条件。

`

class NetworkProvider  {
public var userID: String

func observeStateChange() {

FIRAuth.auth()?.addStateDidChangeListener({ (auth, authenticatedUser) in
if let user = authenticatedUser {
userID = user.uid
}
}
}

func currentUserID() -> String {
return self.userID
}
}`

最佳答案

使用 DispatchQueue 可以避免数据竞争:

class NetworkProvider  {
let isolationQueue = DispatchQueue(label: "com.your.domain.xxx", attributes: .concurrent)
private var _userID: String
public var userID: String {
set { isolationQueue.async(flags: .barrier) { self._userID = newValue } }
get { return isolationQueue.sync { _userID } }
}

func observeStateChange() {

FIRAuth.auth()?.addStateDidChangeListener({ (auth, authenticatedUser) in
if let user = authenticatedUser {
userID = user.uid
}
}
}

func currentUserID() -> String {
return self.userID
}
}

关于swift - 解决 iOS Swift 中的数据争用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46414628/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com