RxSwift为什么没有调用dispose就出现内存泄漏

RxSwift为什么没有调用dispose就出现内存泄漏,swift,rx-swift,Swift,Rx Swift,我正在阅读关于RxSwift的文章,关于内存泄漏有很多讨论。这里引用了RxSwift上的入门指南: 如果序列本身没有终止,例如通过一系列按钮点击,则将永久分配资源,除非手动调用dispose,或在disposeBag内使用takeUntil操作符或以其他方式自动调用 下面是一段代码,来自第2章:可观察到的内存确实泄漏的地方: Observable<String>.create({ observer in observer.onNext("1") // observer

我正在阅读关于RxSwift的文章,关于内存泄漏有很多讨论。这里引用了RxSwift上的入门指南:

如果序列本身没有终止,例如通过一系列按钮点击,则将永久分配资源,除非手动调用
dispose
,或在disposeBag内使用takeUntil操作符或以其他方式自动调用

下面是一段代码,来自第2章:可观察到的内存确实泄漏的地方:

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") }
)
observate.create({observator in
onNext观察员(“1”)
//observer.onError(MyError.anError)
//observer.onCompleted()
返回一次性物品。创建()
}).订阅(
onNext:{print($0)},
onError:{print($0)},
未完成:{打印(“已完成”)},
onDisposed:{print(“Disposed”)}
)

我理解处置资源(例如,使用处置袋)非常重要。但是,我不明白的是:哪些资源正在泄漏以及如何泄漏?

它将泄漏,因为该链及其捕获的所有资源将不会被释放


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

为什么你不想处理你的一次性物品?嘿@iWheelBuy,我不是想跳过它。我在上面发布的示例来自一本书,它使用该书作为反例来解释为什么在
subscribe
调用之后添加
.dispose(by:disposeBag)
很重要(因为如果我们不调用
.onError
.onCompleted
如上所述,可能会出现内存泄漏)。然而,我并不清楚这里泄漏了哪些资源。