首页 文章

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

提问于
浏览
3

我正在阅读有关RxSwift的内容,并且有很多关于内存泄漏的讨论 . 这里引用了主RxSwift repo的入门指南:

如果一个序列不自行终止,如一系列按钮水龙头,资源将被永久性地分配,除非处置手动调用,自动内disposeBag的,与takeUntil经营者或其他方式 .

这里是 Chapter 2: ObservablesReactive Programming with Swift代码片段,其中内存泄漏:

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 回答

  • 1

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

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

相关问题