iOS dataWithContentsOfURL - 幕后发生了什么

时间:2012-10-10 07:26:39

标签: ios

我有一些简单的代码(从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和服务器之间的任何缓存?即。我可以肯定,如果我收到回复,它是新鲜的数据,并且不仅仅是坐在safari / iOS的缓存中。
  4. 非常感谢

1 个答案:

答案 0 :(得分:0)

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

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

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