我正在阅读有关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") }
)
我知道处理资源非常重要(例如,配置包)。但是,我不明白的是:什么资源泄漏以及如何泄漏?
答案 0 :(得分:1)
它将泄漏,因为它捕获的链和所有资源都不会被释放。
RxSwift分配一些包含您订阅的链的对象。它们都占用了内存,对于Observable
链的正确业务逻辑是必需的。您也可以将一些超出范围的对象传递给链中的闭包,并且它们也将被保留,因为闭包是一种引用类型,并且对它们捕获的资源有很强的保持力。