swift 使用 delegate 内存泄露问题

帐号退出登录,切换rootViewController的时候,发现内存没有释放,于是对代码进行了一遍检查。发现了在定义 protocol的时候,有两种方式。

区别

一个是使用 @objc定义, 一个不使用@objc。

使用 @objc 方法可以定义 optional。否则,不可以。

使用 @objc 定义接口

@objc protocol delegateAction : NSObjectProtocol {
    /** 代理方法 */
    optional func delegateMethod()
}

这里的写法会造成内存泄露

class LTViewModel: NSObject {
	/** 代理 */
    var delegate: delegateAction?
}

正确的写法

class LTViewModel: NSObject {
	//这里需要添加 weak 修饰
	/** 代理 */
    weak var delegate: delegateAction?
}

直接使用 protocol 定义接口

protocol delegateAction : NSObjectProtocol {
    /** 代理方法 */
    optional func delegateMethod()
}

正确的写法

//这里不能够使用 weak 修饰,即使使用了,Xcode也会报错。
class LTViewModel: NSObject {
	/** 代理 */
    var delegate: delegateAction?
}
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy