[英]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.