弱代表变为零

5 delegates weak-references ios swift swift3

在我的应用程序中,我正在使用代理,以便我可以在数据准备就绪时读取数据.

我正在给两个班级的代表打电话.这是我的代码

protocol MyDelegate: class {
    func getData()
}

class MyDelegateCalss {

     weak var delegate: MyDelegate?    
     func loadData() {

        // doing some actions        

         if(self.delegate != nil){
            self.delegate!.getData!()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在一个类中,我在tableview numberOfSections委托方法中加载此方法.

class A: UIViewController, MyDelegate {


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


    func getData(){
       // Doing some actions
    }
}
Run Code Online (Sandbox Code Playgroud)

这个方法我从另一个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()
       }
    }
Run Code Online (Sandbox Code Playgroud)

在A级,我的代表工作正常.我能看到getData方法正在调用.

从类B开始,委托变为nil并且无法看到调用getData方法

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

如何处理这种情况?

Loo*_*oos 5

您的delegatevar 声明为weak. 如果在您分配为委托(实现MyDelegate)的对象上没有任何保持强引用,则一旦对象被释放(例如,您实例化它的范围的末尾),您delegate将传递到nil。

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