使用嵌套函数替代闭包能否避免RxSwift中的self内存泄漏?
关于RxSwift嵌套函数是否会引发内存泄漏的疑问
我在使用RxSwift时编写了如下函数:
private func setAndVerifyTestmode(isOn: Bool) { parameterService.setTestMode(value: isOn) .flatMap { _ in self.parameterService.requestTestMode() } .subscribe( { [weak self] _ in //do stuff }) .disposed(by: disposeBag) }
后来发现flatMap的闭包中忘记使用[weak self],于是修改代码如下:
private func setAndVerifyTestmode(isOn: Bool) { parameterService.setTestMode(value: isOn) .flatMap { [weak self] (_: Int?) in guard let self = self else { return .just(nil) } self.parameterService.requestTestMode() } .subscribe( { [weak self] _ in //do stuff }) .disposed(by: disposeBag) }
但此时出现编译错误:Generic parameter Result could not be infered。无法解决该错误的情况下,我尝试用嵌套函数替代闭包,最终代码如下:
private func setAndVerifyTestMode(isOn: Bool) { func requestTestMode(_: Int?) -> Single<Int?> { parameterService.requestTestMode() } parameterService.setTestMode(value: isOn) .flatMap(requestTestMode(_:)) .subscribe( { [weak self] _ in //do stuff }) .disposed(by: disposeBag) }
这段代码能正常编译运行,我原本认为无需引用self就能解决内存泄漏问题,但同事表示这和闭包中不使用[weak self]的效果相同,仍会存在内存泄漏。我想知道:使用上述嵌套函数是否真的能避免内存泄漏、self引用相关问题,还是像同事所说的那样,这样做没有任何益处?
内容的提问来源于stack exchange,提问作者Joakim Sjöstedt
相关产品推荐
相关产品推荐

