4

のセクションを読んだとき、

NSDataReadingOptions
Options for methods used to read NSData objects.

enum {
   NSDataReadingMappedIfSafe = 1UL << 0,
   NSDataReadingUncached = 1UL << 1,
   NSDataReadingMappedAlways = 1UL << 3,
};
typedef NSUInteger NSDataReadingOptions;

それは言う

NSDataReadingUncached ファイルをファイル システム キャッシュに保存しないことを示すヒント。一度読み取られて破棄されるデータの場合、このオプションによりパフォーマンスが向上します。OS X v10.6 以降で利用できます。NSData.h で宣言されています。

したがって、デフォルトではこれらの URL リクエストはキャッシュされ、共有グローバル キャッシュを使用する場合、データをキャッシュするために NSURLRequest を実装する必要はないと想定していますか? この理解は正しいですか?

4

2 に答える 2

7

dataWithContentsOfURL:options:error:ネットワークから何かを取得するための API としては、おそらく最悪の API であると言って始めましょう。1 行のコードでネットワークからリソースを取得できるため、開発者にとって非常に魅力的ですが、非常に有害な副作用がいくつかあります。

まず、呼び出されたスレッドをブロックします。これは、これをメイン スレッド (UI を更新できる唯一のスレッド) で実行すると、アプリケーションがユーザーに対してフリーズしたように見えることを意味します。これは、ユーザー エクスペリエンスの観点からすると、非常に大きな「ノー ノー」です。

第 2 に、これらのリクエストをキャンセルすることはできないため、このリクエストをバックグラウンド スレッドに置いたとしても、データが役に立たなくなったとしても、ダウンロードは続行されます。たとえば、ユーザーがビュー コントローラーに到着し、このリクエストを実行した後、ユーザーが [戻る] ボタンを押した場合、そのデータは関連性がなくなったとしてもダウンロードを続けます。

結論:これらのAPI は使用しないでください。

NSURLConnectionまたはのような非同期ネットワークを使用してくださいAFNetworking。これらのクラスは、データを効率的に取得し、ユーザー エクスペリエンスに影響を与えないように設計されています。さらに優れているのは、最初に尋ねた特定のユースケースを処理することです:ディスクへのキャッシュを停止するにはどうすればよいですか? .

于 2013-07-24T13:22:50.207 に答える