1

KLM (XML ベース) ファイルを iOS のドキュメント ディレクトリにロードする簡単なコード ( SOからコピーして貼り付けたもの) があります。次に、読み込んだデータを地図上に表示します。

これはファイルをダウンロードして保存する良い方法ではないことを認識しています.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. 2 回目に機内モードでプログラムを実行すると、まだ動作しているように見えます。ダウンロードと writeToFile をスキップしてもよいと判断するのはいつですか?
  3. dataWithContentsOfURL とサーバーの間でキャッシュを使用しているかどうかは誰にもわかりませんか? すなわち。応答を受け取った場合、それは新しいデータであり、サファリ/iOS のキャッシュに座っているだけではないことを確信できますか?

どうもありがとう

4

1 に答える 1

0
  1. dataWithContentsOfURLはブロッキングメソッドであるため、メインスレッドで実行しないでください。

  2. おそらく内部タイムアウトがありますが、それはプライベートです...多分60秒。

  3. ドキュメントにはキャッシュについて何も書かれていないので、キャッシュはまったくないと思います。

于 2012-10-10T08:02:38.707 に答える