在闭包中快速访问var

时间:2019-01-10 15:05:05

标签: swift

我有一个这样的Swift代码:

  private var myVar = 0 {
    didSet {
        DispatchQueue.main.async { [weak self] in

            if let myVar = self?.myVar {
                if myVar > 0 {
                   // Do some UI stuff, access myVar again
                }        
            }
        }
    }
}

我的问题是,我们是否总是必须经历“如果让myVar = self?.myVar”这样的痛苦,然后检查myVar,特别是在这里我们在同一个变量的didSet块中吗?

1 个答案:

答案 0 :(得分:2)

DispatchQueue.main.async确保执行提供的闭包,并且不会存储对传递的闭包的引用,因此即使您未将self标记为弱也不会导致内存泄漏。因此,以下操作应足够安全:

private var myVar = 0 {
  didSet {
    DispatchQueue.main.async {
      if self.myVar > 0 {

      }        
    }
  }
}

请注意,即使您对对象的引用变为零,对self的引用仍将存在,直到处理async闭包为止。因此self将一直存在,直到async

执行并处理DispatchQueue块为止