Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.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_Model View Controller - Fatal编程技术网

Ios 我的模型对象应该负责下载自己的资源吗?

Ios 我的模型对象应该负责下载自己的资源吗?,ios,model-view-controller,Ios,Model View Controller,Myapp使用远程API更新其数据,并且必须脱机工作,因此在显示应用程序的主要部分之前,必须下载所有数据 API返回一个表示应用程序内容的大JSON结构。JSON被转换成许多字典和数组,然后模型类被实例化并由这些字典和数组支持 我的问题是,其中一些字典和数组包含图像的URL,这些图像也必须下载。每个模型对象都应该负责下载自己的图像吗?或者我应该有某种控制器类来处理这个问题 还有,处理这个问题的好方法是什么?例如,我如何知道所有模型对象何时完成了资源下载 所有资源都必须提前上传,因为客户端希望能够

Myapp使用远程API更新其数据,并且必须脱机工作,因此在显示应用程序的主要部分之前,必须下载所有数据

API返回一个表示应用程序内容的大JSON结构。JSON被转换成许多字典和数组,然后模型类被实例化并由这些字典和数组支持

我的问题是,其中一些字典和数组包含图像的URL,这些图像也必须下载。每个模型对象都应该负责下载自己的图像吗?或者我应该有某种控制器类来处理这个问题

还有,处理这个问题的好方法是什么?例如,我如何知道所有模型对象何时完成了资源下载


所有资源都必须提前上传,因为客户端希望能够在没有互联网连接的情况下使用应用程序。

答案取决于应用程序的业务需求

  • 人们通常会提前下载JSON数据,但会推迟图像的加载,直到UI需要时才下载(这种模式称为“延迟加载”)。一种特别优雅的处理方法是使用执行实时异步图像检索的
    UIImageView
    类别(这是一个非常好的实现;如果您正在使用,它也有一个)。对于这两种情况,您只需执行以下操作:

    [self.imageView setImageWithURL:url];
    
    这将异步检索图像,缓存图像以防UI再次需要它,等等。此外,如果您在具有单元格重用的tableview中使用它,它将取消以前的单元格的旧请求,这些单元格的下载尚未完成,以确保对可见单元格图像的请求不会在用户可能不再关心的一堆旧请求之后被积压,等等

  • 但有时,您确实希望提前检索所有内容(例如,您正在下载一本杂志的内容,以便脱机阅读)

    在这种情况下,您可能需要一个单独的数据控制器来下载和解析结果,而不是让模型本身进行检索。如果需要在完成此操作时通知UI,可以使用本地通知


  • 虽然后一种模式乍一看似乎很吸引人,但它有许多缺点。例如,如果用户使用手机连接,您可能会花费大量带宽下载用户可能不立即需要的图像,并在下载过程中消耗用户的数据计划和电池。因此,您可能只想在以下情况下这样做:(a)您确实需要离线使用所需的一切;(b)您对所需的资源(数据计划和电池消耗)没有意见。

    答案取决于您应用程序的业务需求

  • 人们通常会提前下载JSON数据,但会推迟图像的加载,直到UI需要时才下载(这种模式称为“延迟加载”)。一种特别优雅的处理方法是使用执行实时异步图像检索的
    UIImageView
    类别(这是一个非常好的实现;如果您正在使用,它也有一个)。对于这两种情况,您只需执行以下操作:

    [self.imageView setImageWithURL:url];
    
    这将异步检索图像,缓存图像以防UI再次需要它,等等。此外,如果您在具有单元格重用的tableview中使用它,它将取消以前的单元格的旧请求,这些单元格的下载尚未完成,以确保对可见单元格图像的请求不会在用户可能不再关心的一堆旧请求之后被积压,等等

  • 但有时,您确实希望提前检索所有内容(例如,您正在下载一本杂志的内容,以便脱机阅读)

    在这种情况下,您可能需要一个单独的数据控制器来下载和解析结果,而不是让模型本身进行检索。如果需要在完成此操作时通知UI,可以使用本地通知


  • 虽然后一种模式乍一看似乎很吸引人,但它有许多缺点。例如,如果用户使用手机连接,您可能会花费大量带宽下载用户可能不立即需要的图像,并在下载过程中消耗用户的数据计划和电池。因此,您可能只想在以下情况下这样做:(a)您确实需要离线使用所需的一切;(b)您对所需的资源(数据计划和电池消耗)没有意见。

    答案取决于您应用程序的业务需求

  • 人们通常会提前下载JSON数据,但会推迟图像的加载,直到UI需要时才下载(这种模式称为“延迟加载”)。一种特别优雅的处理方法是使用执行实时异步图像检索的
    UIImageView
    类别(这是一个非常好的实现;如果您正在使用,它也有一个)。对于这两种情况,您只需执行以下操作:

    [self.imageView setImageWithURL:url];
    
    这将异步检索图像,缓存图像以防UI再次需要它,等等。此外,如果您在具有单元格重用的tableview中使用它,它将取消以前的单元格的旧请求,这些单元格的下载尚未完成,以确保对可见单元格图像的请求不会在用户可能不再关心的一堆旧请求之后被积压,等等

  • 但有时,您确实希望提前检索所有内容(例如,您正在下载一本杂志的内容,以便脱机阅读)

    在这种情况下,您可能需要一个单独的