Swift 中的“[self] in”和“[weak self] in”有什么区别?

What is difference between "[self] in" & "[weak self] in" in Swift?

我刚刚发现我可以在闭包中写“[self]”而不是[weak self]但是我不确定它是否安全。

更多详情:

之前:

func roundShape(corners: CACornerMask, radius: CGFloat) {
        DispatchQueue.main.async { [weak self] in
            layer.cornerRadius = radius
            layer.maskedCorners = corners
        }
    }

现在:

 func roundShape(corners: CACornerMask, radius: CGFloat) {
      DispatchQueue.main.async { [self] in
           layer.cornerRadius = radius
           layer.maskedCorners = corners
      }
  }

所以知道区别的请点亮我

写入 [self] 与离开闭包相同,因为这意味着它可能导致与 [weak self] 不同的保留周期,顺便说一句,不需要任何 DispatchQueue.main.async { 作为 GCD 队列'持有对 self

的强烈引用

Weak selfARC的一个概念,主要用来避免retain cycle。如果直接使用self,那么它会创建一个强引用,并且不会从内存中移除。因此,持有变量的对象将保持活动状态并导致内存泄漏。为了克服这个问题,必须使用 weak self,它会在工作完成后立即释放内存。

注意: 弱自我是一个可选所以你可以使用可选链接来访问变量。