Simultaneous accesses to 0x1c5a674c8, but modification requires exclusive access.

ZY_FlyWay發表於2018-05-29

錯誤環境:

計時器計算,time是一個自定義結構體。

 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()
    }

錯誤分析:

 報錯如標題,錯誤主要是在這一句 

self.currentTime?.second = (self.currentTime?.second)! - 1

這是一個常規操作,如果計算的是基本資料型別,必然不會報錯。

現在currentTime是一個結構體,存在記憶體裡。進行計算的時候都會進行IO(讀寫)操作,這樣的話執行緒就不安全了,就是最開始學習的資源搶奪問題。

錯誤解決:

  

  let second = self.currentTime?.second
  self.currentTime?.second = second! - 1

這樣每次都是一個賦值,然後再從新賦值回去




相關文章