ios – 在swift中创建线程安全数组

我在swift中有一个线程问题。我有一个数组,其中有一些对象。在一个委托,类每秒获取一个新的对象。之后,我必须检查对象是否已经在数组中,所以我必须更新对象,否则我必须删除/添加新的对象。

如果我添加一个新的对象,我必须先通过网络获取一些数据。这是通过块的handelt。

现在我的问题是,如何同步这个任务?

我试过一个dispatch_semaphore,但这一块阻止UI,直到块完成。

我也试过一个简单的bool变量,它检查该块是否当前执行,同时跳过比较方法。

但两种方法都不理想。

什么是管理数组的最好方法,我不想在数组中有重复的数据。

Kirsteins是正确的,但你不总是需要使用dispatch队列。您可以使用:

objc_sync_enter(array)
// manipulate the array
objc_sync_exit(array)

这应该做的伎俩。为了额外的奖励,你可以创建一个功能,使用任何时候你需要线程安全:

func sync(lock: NSObject, closure: () -> Void) {
    objc_sync_enter(lock)
    closure()
    objc_sync_exit(lock)
}

...
var list = NSMutableArray()
sync (list) {
   list.addObject("something")
}

注意我已经将AnyObject更改为NSObject。在Swift中,集合类型实现为结构体,它们通过值传递,所以我猜测使用方便的同步函数处理通过引用传递的可变集合类会更安全。

http://stackoverflow.com/questions/28191079/create-thread-safe-array-in-swift

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:ios – 在swift中创建线程安全数组