iPhone アプリで と を使用ASIHttpRequests
しASINetworkQueue
て、Web サービスから 10 万個の XML ファイルと多数のサムネイルを取得しています。のスタイルでリクエストをキャッシュしたいと思いますNSURLCache
。ASIはキャッシュをそのままサポートしていないようで、コードを見てみるとCに落ちてリクエストを作成しているので、NSURLCache
レイヤーを挿入するのは難しいようでした。
これを実装する最良の方法は何ですか?
iPhone アプリで と を使用ASIHttpRequests
しASINetworkQueue
て、Web サービスから 10 万個の XML ファイルと多数のサムネイルを取得しています。のスタイルでリクエストをキャッシュしたいと思いますNSURLCache
。ASIはキャッシュをそのままサポートしていないようで、コードを見てみるとCに落ちてリクエストを作成しているので、NSURLCache
レイヤーを挿入するのは難しいようでした。
これを実装する最良の方法は何ですか?
ASIHTTPRequest がキャッシングをサポートするようになりました - ASIDownloadCache を確認してください。
[ASIHTTPRequest setDefaultCache:[ASIDownloadCache sharedCache]]
ASIHTTPRequestを使用してこれを直接行う方法を尋ねる人は、オプションとしてこの機能のサポートを追加するコードのこのブランチに興味があるかもしれません。
ASI コードにドロップダウンする前に、独自のキャッシングを提供できます。
メソッドを持つクラスに ASI コードをラップします。
-(NSString *)getContentFor:(NSURL *)url
このメソッドは、最初に内部 NSDictionary をチェックして、指定された URL のキーが存在するかどうかを確認します。存在する場合は、キーと共に格納されているオブジェクトを返します。
そうでない場合は、通常の ASIRequest を実行します。リクエストがサーバーから受信されると、URL のキーとともに辞書に文字列として保存されます。
もちろん、非同期リクエストと古いリクエストの期限切れを慎重に処理する必要があります。
これを試してください、それは私のために働きます。
__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadCache:[ASIDownloadCache sharedCache]];
[request setCacheStoragePolicy:ASICachePermanentlyCacheStoragePolicy];
[request setCachePolicy:ASIAskServerIfModifiedWhenStaleCachePolicy];
[request setSecondsToCache:60*60*24]; // Cache for 24 hrs
[request setDelegate:self]; // A delegate must be specified
[request setCompletionBlock:^{
NSURLConnection は NSURLCache のスタイルでキャッシュをサポートしており、舞台裏で多くの作業を行っています。cachedResponse を操作できる便利なデリゲート メソッドもあります。
- (NSCachedURLResponse *)connection:(NSURLConnection *)connection willCacheResponse:(NSCachedURLResponse *)cachedResponse