Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 下载和管理模型资源的设计模式_Ios_Design Patterns_Mvvm_Singleton - Fatal编程技术网

Ios 下载和管理模型资源的设计模式

Ios 下载和管理模型资源的设计模式,ios,design-patterns,mvvm,singleton,Ios,Design Patterns,Mvvm,Singleton,下载和管理移动应用程序中的模型资源是一项相当常见的任务。模型资源通常采用存储在云中的图像或视频数据的形式。应用程序的一般流程是获取模型列表,每个模型都有一个url或指向资源的链接,然后下载资源,将其缓存在设备上,然后播放/显示 在做这件事的时候,我遇到了一些障碍,我提出了一些问题 首先,应在应用程序体系结构的何处执行此下载?模型类显然不是这个位置,因为当用户在应用程序中导航时,您不能保证模型对象将保持实例化状态,这将导致下载请求意外取消。如果您使用的是MVVM体系结构,下载的地方似乎是视图模型,

下载和管理移动应用程序中的模型资源是一项相当常见的任务。模型资源通常采用存储在云中的图像或视频数据的形式。应用程序的一般流程是获取模型列表,每个模型都有一个url或指向资源的链接,然后下载资源,将其缓存在设备上,然后播放/显示

在做这件事的时候,我遇到了一些障碍,我提出了一些问题

首先,应在应用程序体系结构的何处执行此下载?模型类显然不是这个位置,因为当用户在应用程序中导航时,您不能保证模型对象将保持实例化状态,这将导致下载请求意外取消。如果您使用的是MVVM体系结构,下载的地方似乎是视图模型,但这同样面临着相同的问题,因为视图模型附加到视图控制器实例,并且这些请求绑定到视图模型。当视图模型解除分配时,请求将返回,但原始调用方将不存在

第二,这里的单例设计模式是合适的用例吗?一般来说,出于上述原因,应避免使用单例模式。但是,我看不到一种方法可以确保请求在不使用单例的情况下返回并在视图导航之外成功缓存

有没有人成功地构建了一个模型管理器来完成这一切?我设想的是某种单例对象与模型类符合的协议相结合,该协议提供执行请求所需的信息

编辑:


我玩的另一个可能性是基于服务的体系结构,类似feathersjs的东西。

这一切都取决于所需的UX和资源量,但我通常被迫在实际需要之前下载和缓存图像,这样用户就不会被困在等待中,从而强制在viewcontroller中实现

对于图像,我通常使用

在视频中,我发现用户希望它预加载一段时间,所以除非预期脱机使用,否则不应该浪费空间预缓存它们


至于单例使用,我避免使用它。若它在数据库中,它可以在任何地方检索,若在内存中,它可以从一个控制器传递到另一个控制器。在这种困难的情况下使用它们是很常见的(甚至很流行),有些人还会使用app delegate。

hmm是的,我必须同意你的看法。它是,而且它不依赖于UI/UX,我认为这使抽象成为一个非常困难的问题。