在iPad应用程序中下载大量图像

在iPad应用程序中下载大量图像,ipad,ios5,Ipad,Ios5,我正在开发一个应用程序,我需要在本地下载大量图像,以便它们可以脱机使用。图像的数量可以是100-10000。每个图像可能在100K到250K之间变化 我可以通过NSOperationQueue来实现这一点,我已经有代码来实现这一点,但这个问题更多的是概念性的。我不确定在这里采取什么样的最佳方法 1用户第一次登录后,我是否立即下载所有图像?根据图像的数量,这可能需要很长时间,如果用户同时关闭应用程序会怎么样。我知道在这种情况下,后台进程可以花费的时间是有限的?老实说,我不想在后台做任何事情,比如当

我正在开发一个应用程序,我需要在本地下载大量图像,以便它们可以脱机使用。图像的数量可以是100-10000。每个图像可能在100K到250K之间变化

我可以通过NSOperationQueue来实现这一点,我已经有代码来实现这一点,但这个问题更多的是概念性的。我不确定在这里采取什么样的最佳方法

1用户第一次登录后,我是否立即下载所有图像?根据图像的数量,这可能需要很长时间,如果用户同时关闭应用程序会怎么样。我知道在这种情况下,后台进程可以花费的时间是有限的?老实说,我不想在后台做任何事情,比如当应用程序关闭时

2当用户选择特定类别时,我是否下载图像?如果一个类别有800个图像,那么如果用户在所有800个图像下载完成之前选择了另一个类别,会发生什么?我总是可以启动线程下载,但如果用户选择其他类别,线程会继续运行吗

3在设置中加入一些内容,让用户自己决定。比如Total Images:8000 Available:2000,还有一个按钮,上面写着Download All,它会显示一个UIProgressView,显示正在发生的事情……所以用户可能会等到一切完成

还是其他方法


想法?

我只会在用户实际需要对图像进行处理时下载图像。如果您提前下载所有图像,您的用户会讨厌您

据我从您的描述(包括评论)中了解,我认为最好的方法是在一个线程中下载您的所有图像,并使下载过程可恢复。这样,您将镜像远程图像数据库以供脱机使用

这意味着:

您可以跟踪已下载的图像

每次应用程序启动/恢复时,您都会从离开的位置开始下载线程

您还应该提供一种机制,以便用户在尝试访问尚未下载的图像时能够得到适当的通知,但我认为这应该没有问题您还可以在某个地方提供一个进度指示器


这是什么样的应用程序?如果图像是应用程序的一部分,那么只需将其与应用程序捆绑。如果图像是用户生成的内容或您提供的某些内容,那么您必须考虑是否需要同时使用所有图像-我通常不这么认为。这是用户生成的内容,因此不能与应用捆绑在一起。您可以进行渐进加载,显示固定数量,仅在用户请求时加载更多,和/或为所有图像创建缩略图,以便仅在用户希望查看详细信息时加载完整图像。另一种方法是显示一个加载屏幕,第一次在本地下载所有内容,但如果图像太多,这可能需要很长时间,如果等待时间太长,用户可能会请求。我在本地生成缩略图,然后从服务器下载大图像。这就是为什么没有下载缩略图的选项。这是一个照片管理应用程序。很多不同类别的图片。每个类别都有一个缩略图网格视图,选择一张照片将显示全屏视图。很像照片应用程序。如果每个类别的图像都是静态的,为什么不下载它们作为gzip+1作为缩略图注释?然后在所有东西都放好后解包,让用户选择他需要的东西。基本上,您只需访问服务器一次,就可以选择resume。单独处理每个请求的IO将在服务器上花费一些额外的时间和负担。这通常可以正常工作,但我正在尝试使所有内容都可以脱机使用。按照这种方法,只有至少查看过一次的图像才能脱机使用。您可以下载正在处理的图像,将其标记为已下载,然后只下载需要处理的新图像吗?将应用程序推送到后台时会超时。你可以要求更多的时间,但通常是10分钟左右。所以最终不是一次下载所有的图片,而是在需要的时候才下载。是的,我已经做到了。渐进式下载,一旦下载,除非服务器说图像已更新,否则不会再次下载。但同样,这意味着用户必须浏览应用程序,每个类别,滚动到每个类别的末尾。我的代码会在网格滚动视图中根据需要下载图像…但是,这是不好的,因为用户有一个任务,就是在应用程序离线之前点击并滚动很多次。这正是我想要实现的。镜像远程图像数据库以供脱机使用。但是,我不知道如何使线程恢复。我有一个核心数据实体中的所有图像,所以我确切地知道哪些图像已经下载
哪些不是。你有没有代码来说明如何启动/恢复一个进程?下载必须是可恢复的,而不是线程;每次启动新线程时,此线程将下载剩余的图片。这有用吗?是的。因此,该线程将位于以下AppDelegate方法中?-voidApplicationIDBECOMEACTIVE:UIApplication*应用程序这是我的好地方。。。别忘了在applicationWillEnterForeground中正确关闭它,我的意思是停止队列,并使数据持久化。我想你的意思是applicationWillResignActive?