在没有[weak self]的情况下调用可选闭包是否安全?

问题描述 投票:0回答:1

我有两个班级,A班和B班。在类 A 中,我声明了一个可选闭包,在类 B 中,我调用该闭包。在类 B 中,您可以在 callTapA 函数中看到,我正在使用 [weak self] 调用闭包以安全地释放引用,但在 callTapB 函数中,我正在调用可选闭包并使用函数进行赋值。两者都是正确的,但是 [weak self] 是如何在 callTapB 中管理的?像这样使用闭包安全吗?

class A {
      var onTapA: ((_ name: String) -> Void)?

      init(onTapA: ((_ name: String) -> Void)? = nil) {
          self.onTapA = onTapA
      }
}

class B {
     var newName:String = ""
     let a:A

     init(a: A) {
         self.a = a
    
         callTapA()
         callTapB()
     }

    
    func callTapA() {
        a.onTapA = { [weak self] name in
            guard let self = self else { return }
            newName = name
        }
    }
    
    func callTapB() {
        a.onTapA = onTapB
    }
    
    func onTapB(name: String) {
        newName = name
    }

}
swift xcode
1个回答
0
投票

这样使用闭包安全吗

不。 A和B实例互相保留;这是一个保留周期和内存泄漏。

© www.soinside.com 2019 - 2024. All rights reserved.