私はどこでもdisposeBagsを使用するプロジェクトを継承しましたが、disposeBagは大量のメモリリークのようです。バッグを利用しているビューコントローラのうち、割り当てを解除したものはありません。これにより、サブスクリプションが積み重なってしまいます。私はDisposeBagメモリリーク?
class TestViewController: UIViewController
{
@IBOutlet weak var testLabel: UILabel!
var basePresenter: BasePresenter = BasePresenter()
var disposeBag: DisposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
bindPresenter()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
//self.disposeBag = DisposeBag() <------------
}
func bindPresenter() {
//super.bindPresenter()
basePresenter.testVariable.asDriver().drive(onNext: { test in
if !test.id.isEmpty {
self.testLabel.text = "Test text" //<------------
}
}).addDisposableTo(disposeBag)
}
deinit{
print("TestView was dealloc'd")
}
}
ハンドブックでは「自己」への参照が重要です。
私の理論は、自己が強い参照であり、ビューコントローラがポップされ、ビューコントローラへの他の参照がない場合でも、バッグが強いので、まだ割り当て解除されないという状況につながっているということですそれを参照してください。バッグが廃棄されないためにVCがデアロックしないためVCがデアロックしないため、バッグが廃棄されない循環ロジック。
コメントアウト行
//self.disposeBag = DisposeBag()
に呼び出され、適切DEALLOCするビューが可能になります。
メモリリークの最前線で、私が直面している問題は、viewWillDisappearにバッグを配置したくないということです。ビューがポップされるときです。このビューにポップアップが戻った場合のために、上にビューを追加すると、私はそれを固執する必要があります。
ご協力いただければ幸いです!
が、それは、UI要素への参照のみではありませんそれはまだVCが処分されない結果になるでしょう – Mars