[英]Memory Issue Possibly Related RxCocoa Binding Method
我有这个 RxCocoa 的绑定方法:
func bindTableView() {
data.asObservable()
.bind(to: tableView
.rx
.items(cellIdentifier: dealCellID, cellType: DealTabCell.self)
)
{
row, profileData, cell in
cell.configureProfile(dataModel: profileData)
}
.disposed(by: disposeBag)
}
数据来自 Firebase,但它会立即加载,当我向下滚动时,内存使用量会超过 1.7 GB。 我认为可重复使用的单元格会自动处理内存,因为如果您没有看到单元格,它就不会使用内存。
Firebase 关闭:
db.collectionGroup("deals").whereField("Sender", isEqualTo: senderEmail!).addSnapshotListener { (snapshot, error) in
guard error == nil else {
print("error?.localizedDescription collectiongroup = \(error?.localizedDescription)")
return
}
self.dealNumber = snapshot?.documents.count ?? 0
DispatchQueue.main.async {
self.dealsPosted.attributedText = NSMutableAttributedString()
.bold("\(self.dealNumber)\n")
.normal("Deals")
}
for document in snapshot!.documents {
let data = document.data()
if let sender = data["Sender"] as? String,
let image = data["ImagePath"] as? String,
let dealTitle = data["DealTitle"] as? String,
let dealDesc = data["DealDesc"] as? String,
let storeID = data["StoreID"] as? String,
let storeTitle = data["StoreTitle"] as? String,
let dealID = data["DealID"] as? String,
let userName = data["UserName"] as? String,
let distance = data["Distance"] as? Double,
let senderUID = data["SenderUID"] as? String {
self.getImageFromURLfromFirebase(path: image, dealTitle: dealTitle, dealDesc: dealDesc, storeTitle: storeTitle, storeID: storeID, dealID: dealID, sender: sender, userName: userName, distance: distance, senderUID: senderUID)
}
在那个 getImageFromURLfromFirebase 方法中,我只是从 url 下载图像,并且行为中继接受另一个值。 我可以提供额外的代码。 这意味着每次类似这样的工作时,在该 firebase 方法的循环中:
DispatchQueue.main.async {
userDealsRelay.accept(userDeals.removingDuplicates())
}
那个对象是这样的:
let userDealsRelay : BehaviorRelay<[DealModel]> = BehaviorRelay(value: [])
我确信内存使用是由 tableview 引起的,因为它只在我向下滚动时发生。
顺便说一句,当我在底部并再次上升时它会停止。 它不是无限增长的。
struct DealModel: Hashable {
var storeID: String?
var dealImage: UIImage?
var dealTitle: String?
var dealDesc: String?
var dealID : String?
var storeTitle: String?
var sender: String?
var userName: String?
var distance: Double?
var senderUID: String?
init(storeID: String?, dealImage: UIImage?, dealTitle: String?, dealDesc: String?, dealID: String?, storeTitle: String?, sender: String?, userName: String?, distance: Double?, senderUID: String?) {
self.storeID = storeID
self.dealImage = dealImage
self.dealDesc = dealDesc
self.dealTitle = dealTitle
self.dealID = dealID
self.storeTitle = storeTitle
self.sender = sender
self.userName = userName
self.distance = distance
self.senderUID = senderUID
}
}
和
let profileData: DealModel
这与 RxCocoa 的绑定方法无关。
您的DataModel
包含一个 UIImage。 您正在下载每个单元格的图像并将图像缓存在 DataModel 中。 因此,随着更多单元格的显示,您的记忆力应该会增加。 即使您不使用 Rx,也会发生这种情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.