AFNetworkingからすべてのキャッシュ機能を無効にすることは可能ですか?
私は独自のカスタムキャッシュシステムを構築しており、これがディスク領域を占有することも望まない。
ありがとう、アシュリー
キャッシュはNSURLCache
によってアプリケーション全体で処理されます。共有キャッシュを設定しない場合、リクエストはキャッシュされません。共有NSURLCache
を使用しても、iOSのデフォルト実装はディスクキャッシュをサポートしていません。
とは言っても、独自のキャッシュシステムを作成する特別な理由がない限り、私は強くそれをお勧めします。 NSURLCache
は99.9%のアプリケーションに十分対応できます。これは、着信応答からのキャッシュディレクティブを処理し、新しいリクエストで適切に使用し、アプリケーションのパフォーマンスボトルネックになる可能性が低い方法で自動的に行います。自分を作るのに何時間も無駄にしてしまった誰か(そして後でそれが完全に不要になったのでそれを捨てる)として、私ははるかに良いと思います開発の注意を集中させる場所。
最初はジェイソンムーアの答えが機能することを見つけましたが、最近、アプリがまだリクエストをキャッシュしていることに気付きました。私は最新のAFNetworkingを使用していないので、最近のビルドでキャッシュが対処されているかどうかはわかりません。
AppleのURLCacheプロジェクトはこう言っています:
デフォルトでは、Cocoa URLロードシステムは小さな共有メモリキャッシュを使用します。このキャッシュは必要ないため、アプリケーションの起動時にゼロに設定します。
そして、これを実行してキャッシュを無効にします。
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];
これはサーバーの実装によって異なりますが、Cache-Control:no-store
ヘッダーを送信リクエストに送信すると、同じヘッダーを含む応答が返されるため、NSURLCache
に応答をディスクにキャッシュしないように指示します。
IMHOこれは、特にNSURLCache
を利用する可能性のある他のアプリケーションで使用されるSDKコードを作成している場合は、ディスクキャッシュを完全に無効にするよりも優れたアプローチです。
NSURLRequest *request = [NSURLRequest requestWithURL:URL cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10];