类型是否在Swift中进行原子操作? -BAD_ACCESS_ERROR

时间:2018-08-01 17:36:20

标签: swift concurrency

假设我正在尝试访问两个线程之间的共享变量。一个线程将连续将共享变量设置为nil或可释放对象的引用。

类代码

class ConcurrentPrinter {
    var value: AnyObject?
}

线程一

// called 30 times per second
func setter(){
    value = shouldSet ? nil : valueArray[0]
    // where the value is an instance type
}

第二线程

// also called 30 times per second
func getter() {
    if value != nil {
        guard let desiredObject = value as? desiredObjectType else {
        return
    }
}

由于某种原因,当它试图将值转换为期望的ObjectType时,我在guard语句中收到Bad_Address错误。发生这种情况是因为强制转换操作获取了值的地址,然后在完成强制转换操作之前将其释放了吗?

1 个答案:

答案 0 :(得分:0)

好的,我知道了。答案是将每个操作放在DispatchQueue上,并使用异步请求运行每个代码。这样可以确保两段代码同时运行