帐号退出登录,切换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?
}