自从我在iOS上的第一个应用程序以来,我一直在使用MVC。。。现在我想试试MVVM。
我的方法是,模型可以包含远程URL,ViewModel请求下载图像。(然后推到绑定视图(。。。我认为这是合适的,以避免在视图中提出网络请求(甚至更糟,单元格!(
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填充大量视图模型。。。
如果每个单元都有自己的PersonEntryViewModel
,并且在单元准备重用时被丢弃,那么内存就不是问题,因为图像会同时被丢弃。
我认为最好不要将下载代码放在init方法中。最好是有某种触发器方法,当视图模型传递到单元格时可以调用。
这实际上取决于更大的体系结构是什么样子的。
如果你想在Rx-MVVM-C应用程序中看到一些处理图像的例子,RxSwift松弛通道中有几个很棒的例子:
https://rxswift.slack.com/archives/CTSAM9V27/p1583148003073800https://rxswift.slack.com/archives/CTSAM9V27/p1583149698079500
点击此处加入讨论:https://rxslack.herokuapp.com