我在 Swift 中遇到线程问题。我有一个数组,里面有一些对象。通过委托(delegate),类大约每秒获取新对象。之后我必须检查对象是否已经在数组中,所以我必须更新对象,否则我必须删除/添加新对象。
如果我添加一个新对象,我必须先通过网络获取一些数据。这是通过 block 处理的。
现在我的问题是,如何同步这些任务?
我试过 dispatch_semaphore,但是这个会阻塞 UI,直到阻塞结束。
我还尝试了一个简单的 bool 变量,它检查当前是否正在执行 block 并同时跳过比较方法。
但这两种方法都不理想。
什么是管理数组的最佳方式,我不想在数组中有重复的数据。
最佳答案
Swift 更新
线程安全访问的推荐模式是使用分派(dispatch)barrier
:
let queue = DispatchQueue(label: "thread-safe-obj", attributes: .concurrent)
// write
queue.async(flags: .barrier) {
// perform writes on data
}
// read
var value: ValueType!
queue.sync {
// perform read and assign value
}
return value
关于ios - 在 Swift 中创建线程安全数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28191079/