弱委托变为零
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/
在我的应用程序中,我使用委托,这样我就可以在数据准备就绪时读取它。
我正在呼叫来自两个 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/