Type Casts是Swift中的原子操作吗?-BAD_ACCESS_ERROR



假设我正在尝试访问两个线程之间的共享变量。一个线程将连续地将共享变量设置为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
}

线程2

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

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

好吧,我想明白了。答案是将每个操作放在DispatchQueue上,并使用异步请求运行每个代码。这确保了两段代码同时运行

相关内容

  • 没有找到相关文章

最新更新