弱委托变为零

Weak delegate becomes nil

在我的应用程序中,我使用委托,这样我就可以在数据准备就绪时读取它。

我正在呼叫来自两个 class 的代表。这是我的代码

protocol MyDelegate: class {
    func getData()
}

class MyDelegateCalss {

     weak var delegate: MyDelegate?    
     func loadData() {

        // doing some actions        

         if(self.delegate != nil){
            self.delegate!.getData!()
        }
    }
}

在一个 class 中,我在 tableview numberOfSections 委托方法中加载此方法。

class A: UIViewController, MyDelegate {


    func somefunc(){
        let mydelegatecls : MyDelegateCalss = MyDelegateCalss()
        mydelegatecls.delegate = self
        mydelegatecls.loadData()
    }


    func getData(){
       // Doing some actions
    }
}

这个方法是我从另一个 calss 加载的。

class B: UIViewController, MyDelegate {


   open func testfunc(){

    let mydelegatecls : MyDelegateCalss = MyDelegateCalss()
      mydelegatecls.delegate = self
      mydelegatecls.loadData()
   }



    func getData(){
      // doing some other stuff    
    }

}



class C: UIViewController {

       func testfunc(){

        let b : B = B()
          b.testfunc()
       }
    }

这里来自 class 我的代表工作正常。并且我能够看到 getData 方法正在调用。

从ClassB开始,delegate变为nil,看不到getData方法被调用

如果我让委托引用它的工作正常。但这会导致内存泄漏。

如何处理这种情况?

您的 delegate 变量声明为 weak。如果没有任何东西对您指定为委托的对象保持强引用(实现 MyDelegate),您的 delegate 将在对象被释放后立即传递给 nil (例如结束你实例化它的范围)。

一些不错的阅读:https://cocoacasts.com/how-to-break-a-strong-reference-cycle/