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方法
如果我让委托引用它的工作正常.但那会导致内存泄漏.
如何处理这种情况?
您的delegatevar 声明为weak. 如果在您分配为委托(实现MyDelegate)的对象上没有任何保持强引用,则一旦对象被释放(例如,您实例化它的范围的末尾),您delegate将传递到nil。
一些不错的读物:https : //cocoacasts.com/how-to-break-a-strong-reference-cycle/
| 归档时间: |
|
| 查看次数: |
2131 次 |
| 最近记录: |