假设我正在尝试访问两个线程之间的共享变量。一个线程将连续将共享变量设置为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错误。发生这种情况是因为强制转换操作获取了值的地址,然后在完成强制转换操作之前将其释放了吗?
答案 0 :(得分:0)
好的,我知道了。答案是将每个操作放在DispatchQueue上,并使用异步请求运行每个代码。这样可以确保两段代码同时运行