Leakify
通过函数式方式防止内存泄露
厌倦了在每个回调函数上写 `[unowned/weak self] 关闭?您可能考虑使用带有 Leakify 的方法传递。
我们通常鼓励以下情况
class Foo {
let service: BazService
func foo() {
service.bar(then: { [unowned self] p1, p2 in self.handleResponse(param1: p1, param2: p2) })
}
func handleResponse(param1: A, param2: B) {
}
}
如果我们只传递一个函数作为参数,不是很好吗?
func foo() {
service.bar(then: handleResponse)
}
是的,但这种方法有一个大缺点。我们最终得到了服务实例和 Foo 之间美妙的双重引用周期。我们现在能做什么呢?
我们可以将 Leakify 导入我们的项目,并使用它的一些函数式函数来避免强烈的引用循环
func foo() {
service.bar(then: unown(self, self.lk.handleResponse))
}
如果您想使用方便的快捷方式 lf
来获取类引用,您的对象必须有 LeakifyConvertible
协议。
extension Foo: LeakifyConvertible {}
您可以将此要求添加到基类或 NSObject
类中。
安装
Leakify 通过 CocoaPods 提供。要安装它,请简单地将以下行添加到 Podfile 中
pod 'Leakify'
作者
许可
Leakify 遵循 MIT 许可协议。更多信息请参阅 LICENSE 文件。