我在我的公司項目RxSwift中大量使用。在Instrument中執行性能測試時,真正令人擔憂的問題出現了。RxSwift`.addDisposableTo(disposeBag)`導致內存泄漏
每次.addDisposableTo(disposeBag)
被調用時,Instruments都會顯示10個字節左右的內存泄漏。沒有具體的模式,爲什麼會發生,就像沒有在正確的地方使用[weak self]
,它只是沒有明顯的原因發生。
一些示例代碼:
class ContactsViewModel: NSObject {
fileprivate let disposeBag = DisposeBag()
fileprivate let provider = AuthorizedNetworking().provider
var contacts: Variable<[User]> = Variable([])
var suggestedContacts: Variable<[User]> = Variable([])
func fetchContact(suggestions: Bool = false) {
ActivityIndicator.showLoadingHUD(message: "Fetching contacts...")
let observable = provider.request(suggestions ?
.suggest :
.searchContacts(query: nil, global: false)).filterSuccessfulStatusCodes()
let mapped = observable.checkForErrors().mapObject(DataListResponse<User>.self)
mapped.subscribe { [weak self] event in
switch event {
case let .next(response):
ActivityIndicator.hideLoadingHUD()
if response.success, let contacts = response.data {
if suggestions {
self?.suggestedContacts.value = contacts
} else {
self?.contacts.value = contacts.filter { $0.contactType == "Friend" }
}
} else {
Log(.Network, .Error, "Unable to retrieve current user")
}
case let .error(error):
ActivityIndicator.hideLoadingHUD()
Log(.Network, .Error, error.localizedDescription)
default:
break
}
}.addDisposableTo(disposeBag) <- Instruments show leak [6 bytes] at this line
}
}
我做了一些研究,我有一個版本的儀器可能不明白RxSwift,使它看起來像有泄漏,但在現實中,沒有。 但是很可能我的實現有一些我不知道的問題,因爲我在RxSwift方面的經驗不多。 任何幫助表示讚賞。