我正在阅读有关RxSwift的内容,并且有很多关于内存泄漏的讨论 . 这里引用了主RxSwift repo的入门指南:
如果一个序列不自行终止,如一系列按钮水龙头,资源将被永久性地分配,除非处置手动调用,自动内disposeBag的,与takeUntil经营者或其他方式 .
这里是 Chapter 2: Observables 的Reactive 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 回答
它将泄漏,因为它捕获的链和所有资源都不会被释放 .
RxSwift分配一些包含您订阅的链的对象 . 它们都占用了内存,对于
Observable
链的正确业务逻辑是必需的 . 您也可以将一些超出范围的对象传递给链中的闭包,并且它们也将被保留,因为闭包是一种引用类型,并且对它们捕获的资源有很强的保持力 .