自从我在 iOS 上的第一个应用程序以来,我一直在使用 MVC……现在我想尝试 MVVM。
我的方法是模型可以包含远程 URL,并且 ViewModel 发出下载图像的请求。 (然后推到绑定(bind) View )...我认为这是合适的,以避免在 View 中发出网络请求(或者更糟糕的是,单元格!)
class Person: NSObject {
var firstName: String?
var lastName: String?
var avatarURL: URL?
}
class PersonEntryViewModel {
var name:String?
var avatarImage:UIImage?
init(person: Person?) {
super.init()
// omitted: binding self.name based on person.firstName & person.lastName
var request: URLRequest? = nil
if let avatarURL = person?.avatarURL {
request = URLRequest(url: avatarURL)
}
fetchImageFromNetwork({ response, data in
if let data = data {
avatarImage = UIImage(data: data)
}
})
}
}
你怎么看?我的怀疑是关于内存的。我可以有一大堆充满 UIImages 的 View 模型......
最佳答案
如果每个单元格都有自己的 PersonEntryViewModel
并且在单元格准备重用时被丢弃,那么内存不是问题,因为图像将同时被丢弃。
我认为最好不要将下载代码放在init方法中。最好有某种触发方法,您可以在将 View 模型传递给单元格时调用该方法。
这实际上取决于更大的架构是什么样的。
如果你想看一些在 Rx-MVVM-C 应用程序中处理图像的例子,那么在 RxSwift slack channel 中有几个很棒的例子:
https://rxswift.slack.com/archives/CTSAM9V27/p1583148003073800
https://rxswift.slack.com/archives/CTSAM9V27/p1583149698079500
前往此处加入讨论:https://rxslack.herokuapp.com
关于ios - 在 iOS Swift 上从网络加载 MVVM 异步 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60727663/