3

我正在开发一个 iOS 应用程序,我需要定期向设备“推送”新关卡。Level 是一个带有图像、javascript 和 css 文件的 HTML5 页面。在用户可以播放关卡之前,我需要在本地缓存所有关卡的文件。每个级别约为 1.5MB。我正在考虑将包含 HTML、图像、css 和 js 的整个关卡文件夹存档到一个 zip 存档中,下载此 zip,然后在设备上取消存档。但也许单独下载每个文件更有效,因为它们可以同时下载?

这是我的第一个 iOS 应用程序,我不确定如何正确执行。所以问题是:从服务器异步下载整个文件夹然后在下载所有文件时触发回调的最佳方法是什么(请记住,用户可以在下载过程中关闭应用程序或断开连接)?

4

2 回答 2

1

由于大多数用户实际上使用的是慢速 3G 连接,因此压缩存档下载速度会更快(对他们来说更便宜),并且可能会使他们的连接完全饱和。同时进行只会使所有传输变慢,因为它们被迫共享相同的有限连接。一口气完成还避免了与许多传输文件传输失败之一相关的头痛。

于 2012-04-21T15:35:24.360 回答
0

我发现压缩实际上更慢,因为设备解压缩所需的时间与下载所需的时间一样长。如前所述,使用此查看 ASIHTTPRequest 您可以说“获取页面及其所有资源” http://allseeing-i.com/ASIHTTPRequest/Setup-instructions

- (IBAction)downloadLevel:(NSURL *)levelURL
{
    // Assume request is a property of our controller
    // First, we'll cancel any in-progress page load
    [self.request setDelegate:nil];
    [self.request cancel];

    [self setRequest:[ASIWebPageRequest requestWithURL:levelURL]];
    [self.request setCompletionBlock:^{
        //code in here runs when the request finishes
    }];

    [self.request setFailedBlock:^{
        //code in here runs when the request fails
    }];

    // Tell the request to embed external resources directly in the page
    [self.request setUrlReplacementMode:ASIReplaceExternalResourcesWithData];

    // It is strongly recommended you use a download cache with ASIWebPageRequest
    // When using a cache, external resources are automatically stored in the cache
    // and can be pulled from the cache on subsequent page loads
    [self.request setDownloadCache:[ASIDownloadCache sharedCache]];

    // Ask the download cache for a place to store the cached data
    // This is the most efficient way for an ASIWebPageRequest to store a web page
    [self.request setDownloadDestinationPath:
     [[ASIDownloadCache sharedCache] pathToStoreCachedResponseDataForRequest:self.request]];

    [self.request startAsynchronous];
}

更多文档可以在这里找到
http://allseeing-i.com/ASIHTTPRequest/ASIWebPageRequest
和这里
http://allseeing-i.com/ASIHTTPRequest/How-to-use
这一切都很容易阅读。

于 2012-04-21T16:30:59.403 回答