ios - 在 Swift 中创建线程安全数组

标签 ios arrays swift multithreading read-write

我在 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/

相关文章:

PHP 间接修改重载属性 - 使用 ARRAYS

ios - 在图像文件头上添加注释

swift - 在 RAC 3+ 中将 combineLatest 与 UITextFields 结合使用

ios - 如何用来自 firebase 的数据(字符串)填充数组

ios - 应该对表格单元格内具有可变高度的图像应用什么约束(Swift)?

ios - CoreImage 人脸检测发生在每一帧

iphone - iOS - 带方向的反转高度/宽度

ios - 从UIActionSheet访问UIPopoverController

ios - Metal 着色器纹理读取与样本

javascript - 没有Jquery的数组总和