假设我正在尝试访问两个线程之间的共享变量。一个线程将连续地将共享变量设置为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上,并使用异步请求运行每个代码。这确保了两段代码同时运行