UIWebView に必要な大きなファイルの一部をローカルにキャッシュしており、これらのファイルの提供に役立つカスタム実装を備えた NSURLCache のサブクラスを持っています。
- (NSCachedURLResponse *)cachedResponseForRequest:(NSURLRequest *)request
これを使用してリクエストをハイジャックし、ローカルに保存されたファイルのコピーを返します (主に t
cachedResponseForRequest:request の本文 (ボイラー プレートなし) は基本的に次のとおりです。
// logic to figure out what the local file is, load it into a NSData object (f)
NSURLResponse *r = [[NSHTTPURLResponse alloc] initWithURL:request.URL MIMEType:mimetype expectedContentLength:[f length] textEncodingName:nil];
NSCachedURLResponse *cr = [[NSCachedURLResponse alloc] initWithResponse:r data:f] ;
[super storeCachedResponse:cr forRequest:request];
return cr;
これは、単一の svg 画像を除いて、キャッシュされたすべてのコンテンツに対して正しく機能します。svg 画像をロードしようとすると、cachedResponseForRequest:request に進み、NSCachedURLResponse オブジェクトを作成して返します。
ただし、アプリケーションが次に行うことは、リモート サーバーからファイルをダウンロードすることであり、その後のすべての要求はキャッシュから処理されます。ファイルは比較的大きく、パフォーマンスに影響を与えるため、リモートでダウンロードしたくありません。
NSURLCache は .svg ファイルを他のファイルタイプとは異なる方法で処理しますか?