错误环境:
计时器计算,time是一个自定义结构体。
代码语言:javascript复制 func countTimeWithConstantTime(time:timeStruct){
self.currentTime = time
timer.scheduleRepeating(wallDeadline: DispatchWallTime.now(), interval: 1.0)
timer.setEventHandler {
// let second = self.currentTime?.second
self.currentTime?.second = (self.currentTime?.second)! - 1
NVRLOG(self.currentTime?.second)
}
timer.resume()
}
错误分析:
报错如标题,错误主要是在这一句
代码语言:javascript复制self.currentTime?.second = (self.currentTime?.second)! - 1
这是一个常规操作,如果计算的是基本数据类型,必然不会报错。
现在currentTime是一个结构体,存在内存里。进行计算的时候都会进行IO(读写)操作,这样的话线程就不安全了,就是最开始学习的资源抢夺问题。
错误解决:
代码语言:javascript复制 let second = self.currentTime?.second
self.currentTime?.second = second! - 1
这样每次都是一个赋值,然后再从新赋值回去