Leakify 0.2.1

Leakify 0.2.1

Michał Wójtowicz 维护。



Leakify 0.2.1

  • by
  • wojtowiczm

Leakify

通过函数式方式防止内存泄露

Version License Platform

厌倦了在每个回调函数上写 `[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'

作者

Michał Wójtowicz

许可

Leakify 遵循 MIT 许可协议。更多信息请参阅 LICENSE 文件。

参考

受到这篇文章的启发