簡體   English   中英

弱代表變為零

[英]Weak delegate becomes nil

在我的應用程序中,我正在使用代理,以便我可以在數據准備就緒時讀取數據。

我正在給兩個班級的代表打電話。 這是我的代碼

protocol MyDelegate: class {
    func getData()
}

class MyDelegateCalss {

     weak var delegate: MyDelegate?    
     func loadData() {

        // doing some actions        

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

在一個類中,我在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()
       }
    }

在A級,我的代表工作正常。 我能看到getData方法正在調用。

從類B開始,委托變為nil並且無法看到調用getData方法

如果我讓委托引用它的工作正常。 但那會導致內存泄漏。

如何處理這種情況?

您的delegate var聲明為weak 如果沒有任何東西對您指定為委托的對象(實現MyDelegate )保留強引用,則一旦對象被釋放,您的delegate將傳遞給nil (例如,您實例化它的范圍的結尾)。

一些好的閱讀: https//cocoacasts.com/how-to-break-a-strong-reference-cycle/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM