AFNetworkingのすべてのキャッシュ機能を無効にすることは可能ですか?
私は独自のカスタムキャッシュシステムを構築していますが、これもディスクスペースを占有したくありません。
ありがとう、アシュリー
AFNetworkingのすべてのキャッシュ機能を無効にすることは可能ですか?
私は独自のカスタムキャッシュシステムを構築していますが、これもディスクスペースを占有したくありません。
ありがとう、アシュリー
キャッシュは、によってアプリケーション全体で処理されNSURLCache
ます。共有キャッシュを設定しない場合、リクエストはキャッシュされません。共有されている場合でも、NSURLCache
iOSのデフォルトの実装はとにかくディスクキャッシュをサポートしていません。
とは言うものの、独自のキャッシュシステムを作成する特別な理由がない限り、私はそれを強くお勧めします。NSURLCache
アプリケーションの99.9%には十分です。着信応答からのキャッシュディレクティブを処理し、それらを新しいリクエストで適切に使用し、アプリケーションのパフォーマンスのボトルネックになる可能性が低い方法で自動的に実行します。自分で作るのに莫大な時間を無駄にした(そして後でそれが完全に不要だったので捨てた)人として、私はあなたの開発の注意を集中するためのはるかに良い場所があると思います。
最初はJasonMooreの答えが機能することを発見しましたが、最近、アプリがまだリクエストをキャッシュしていることに気付きました。私は最新のAFNetworkingを使用していないので、より最近のビルドでキャッシュが対処されているかどうかわかりません。
AppleのURLCacheプロジェクトには、次のように書かれています。
デフォルトでは、CocoaURLロードシステムは小さな共有メモリキャッシュを使用します。このキャッシュは必要ないため、アプリケーションの起動時にゼロに設定します。
次に、これを実行してキャッシュを無効にします。
NSURLCache *sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:0
diskCapacity:0
diskPath:nil];
[NSURLCache setSharedURLCache:sharedCache];
[sharedCache release];
これにより、アプリ全体のすべてのキャッシュが無効になります。これは、状況によっては理想的ではない場合がありますがNSURLRequest
、要求されたキャッシュポリシーを尊重していないため、残っている唯一のオプションです。
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];
残念ながら、これらの方法はどれも私にはうまくいきませんでした。キャッシュを無効にすることができた唯一の方法は次のとおりです。
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];
これはサーバーの実装によって異なる場合がありますがCache-Control:no-store
、送信リクエストにヘッダーを追加すると、同じヘッダーを含む応答が生成されるためNSURLCache
、応答をディスクにキャッシュしないように命令されます。
IMHOこれは、ディスクキャッシングを完全に無効にするよりも優れたアプローチです。特に、を利用したい他のアプリケーションで使用されるSDKコードを作成している場合はそうですNSURLCache
。