1

我有一些简单的代码(从SO复制和粘贴)将 KLM(基于 XML)文件加载到 iOS 的文档目录中。然后我在地图上显示加载的数据。

我意识到这不是下载和保存文件的好方法 - 似乎建议使用 NSUrlConnection 以便管理加载。但我对这一切都很陌生,我想先了解一下这种情况下发生了什么。

这是代码:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *filePath = [NSString stringWithFormat:@"%@/%@", [paths objectAtIndex:0],@"index.kml"];

// Download and write to file
NSURL *url = [NSURL URLWithString:@"http://www.domain.co.uk/kml-resource..."];
NSData *urlData = [NSData dataWithContentsOfURL:url];
[urlData writeToFile:filePath atomically:YES];

NSURL *fileurl = [NSURL fileURLWithPath:filePath];
kmlParser = [[KMLParser alloc] initWithURL:fileurl];
.....

我的问题是:

  1. dataWithContentsOfURL 连接/下载时会发生什么 - 应用程序是否只是冻结并变得无响应?
  2. 如果我第二次在飞行模式下运行我的程序,它似乎仍然可以工作。它什么时候决定跳过下载和 writeToFile 是可以的?
  3. 有谁知道它是否在 dataWithContentsOfURL 和服务器之间使用任何缓存?IE。我能否确定如果我收到响应,它是新数据,并且不只是位于 safari/iOS 的缓存中。

非常感谢

4

1 回答 1

0
  1. dataWithContentsOfURL 是阻塞方法,所以是的,你不应该在主线程上运行它。

  2. 可能有内部超时,但这是私人的......也许是 60 秒。

  3. 文档没有说明缓存,所以我认为它根本不缓存。

于 2012-10-10T08:02:38.707 回答