Swift代理造成内存泄漏的解决办法

时间:2023-03-08 21:14:22

在swift中,使用代理 ,可能很多人会这样实现:

.首先定义一份协议。
protocol ToolProrocol{
//代理方法
func didRecieveResults(result:Int)
} .定义一个代理属性
//声明代理属性
var delegate : ToolProrocol? self.delegate?.didRecieveResults() . 使用时,设置代理和实现
xxx.delegate = self func didRecieveResults(result: Int) {
}

但其实,这样会有个隐患问题,那就是内存泄漏!!!

解决办法:

在1和2步骤中处理如下:

.首先定义一份协议。
protocol ToolProrocol:NSObjectProtocol{
//代理方法
func didRecieveResults(result:Int)
} .定义一个代理属性
//声明代理属性
weak var delegate : ToolProrocol?

在申明属性时,添加weak申明弱引用,同时,在定义代理协议时,加上继承 NSObjectProtocol(class也行)

这样即可避免循环引用的问题。