RxSwift为什么我们有内存泄漏而不调用dispose

时间:2018-01-14 23:21:39

标签: swift rx-swift

我正在阅读有关RxSwift的内容,并且围绕内存泄漏进行了大量讨论。这里引用了主要RxSwift上的入门指南repo

  

如果序列没有自行终止,例如通过一系列按钮点击,除非dispose被手动调用,自动调用disposeBag,使用takeUntil运算符,或者在另一种方式。

以下是来自Reactive Programming with Swift第2章:Observables 的代码片段,其中内存泄漏了:

Observable<String>.create({ observer in
    observer.onNext("1")
    // observer.onError(MyError.anError)
    // observer.onCompleted()
    return Disposables.create()
}).subscribe(
    onNext: { print($0) },
    onError: { print($0) },
    onCompleted: { print("Completed") },
    onDisposed: { print("Disposed") }
)

我知道处理资源非常重要(例如,配置包)。但是,我不明白的是:什么资源泄漏以及如何泄漏?

1 个答案:

答案 0 :(得分:1)

它将泄漏,因为它捕获的链和所有资源都不会被释放。

RxSwift分配一些包含您订阅的链的对象。它们都占用了内存,对于Observable链的正确业务逻辑是必需的。您也可以将一些超出范围的对象传递给链中的闭包,并且它们也将被保留,因为闭包是一种引用类型,并且对它们捕获的资源有很强的保持力。