19

AFNetworkingのすべてのキャッシュ機能を無効にすることは可能ですか?

私は独自のカスタムキャッシュシステムを構築していますが、これもディスクスペースを占有したくありません。

ありがとう、アシュリー

4

6 に答える 6

25

キャッシュは、によってアプリケーション全体で処理されNSURLCacheます。共有キャッシュを設定しない場合、リクエストはキャッシュされません。共有されている場合でも、NSURLCacheiOSのデフォルトの実装はとにかくディスクキャッシュをサポートしていません。

とは言うものの、独自のキャッシュシステムを作成する特別な理由がない限り、私はそれを強くお勧めします。NSURLCacheアプリケーションの99.9%には十分です。着信応答からのキャッシュディレクティブを処理し、それらを新しいリクエストで適切に使用し、アプリケーションのパフォーマンスのボトルネックになる可能性が低い方法で自動的に実行します。自分で作るのに莫大な時間を無駄にした(そして後でそれが完全に不要だったので捨てた)人として、私はあなたの開発の注意を集中するためのはるかに良い場所があると思います。

于 2012-04-02T05:43:58.947 に答える
25

最初はJasonMooreの答えが機能することを発見しましたが、最近、アプリがまだリクエストをキャッシュしていることに気付きました。私は最新のAFNetworkingを使用していないので、より最近のビルドでキャッシュが対処されているかどうかわかりません。

AppleのURLCacheプロジェクトには、次のように書かれています。

デフォルトでは、CocoaURLロードシステムは小さな共有メモリキャッシュを使用します。このキャッシュは必要ないため、アプリケーションの起動時にゼロに設定します。

次に、これを実行してキャッシュを無効にします。

NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
                                                        diskCapacity:0
                                                            diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];

これにより、アプリ全体のすべてのキャッシュが無効になります。これは、状況によっては理想的ではない場合がありますがNSURLRequest、要求されたキャッシュポリシーを尊重していないため、残っている唯一のオプションです。

于 2013-06-12T10:21:19.790 に答える
23

iOS 6で、リクエストにが含まれていても、リクエストがキャッシュされることがあることがわかりましたNSURLRequestReloadIgnoringCacheData。を返すキャッシュ応答ブロックを追加するとnil、リクエストがキャッシュされなくなります。

NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url
                                              cachePolicy:NSURLRequestReloadIgnoringCacheData
                                          timeoutInterval:20];
AFJSONRequestOperation *op =
[AFJSONRequestOperation JSONRequestOperationWithRequest:request];

// DISABLE CACHE //
[op setCacheResponseBlock:^NSCachedURLResponse *(NSURLConnection *connection, NSCachedURLResponse *cachedResponse) {
    return nil;
}];

[op start];
于 2012-12-19T11:13:39.513 に答える
10

残念ながら、これらの方法はどれも私にはうまくいきませんでした。キャッシュを無効にすることができた唯一の方法は次のとおりです。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

これが元の答えです

于 2015-02-09T09:15:05.133 に答える
0
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
于 2014-07-24T05:54:13.813 に答える
0

これはサーバーの実装によって異なる場合がありますがCache-Control:no-store、送信リクエストにヘッダーを追加すると、同じヘッダーを含む応答が生成されるためNSURLCache、応答をディスクにキャッシュしないように命令されます。

IMHOこれは、ディスクキャッシングを完全に無効にするよりも優れたアプローチです。特に、を利用したい他のアプリケーションで使用されるSDKコードを作成している場合はそうですNSURLCache

于 2017-08-14T21:02:55.483 に答える