2

iOS ではNSURLConnection、Web サーバーからデータを読み込もうとしていますが、これは単なる PNG ファイルです。

サイズが 1,173,084 バイト (約 1 MB) の 1 つのファイルを除いて、すべてのファイルがキャッシュされます。

pic1.png、pic2.png、... 3、4、5、6 の 6 つのファイルをループしてから、1、2、3、... に戻ります。ファイル サイズは 1MB、650kb、450kb、およびいくつかの小さなファイル。

iPad シミュレーターでテストされているため、メモリは問題になりません。

以下は ですでに行われていviewDidLoadます:

[[NSURLCache sharedURLCache] setMemoryCapacity:15 * 1024 * 1024 ];
[[NSURLCache sharedURLCache] setDiskCapacity:20 * 1024 * 1024 ];

NSLog(@"Memory Cache capacity is %i", [[NSURLCache sharedURLCache] memoryCapacity]);
NSLog(@"Disk Cache capacity is %i", [[NSURLCache sharedURLCache] diskCapacity]);

NSURLConnection作成されましたtouchesBegan:

NSURLConnection *connection = [NSURLConnection connectionWithRequest:request 
                                   delegate:self];

キャッシュ サイズは 15MB と 20MB で、合計ファイル サイズである約 3.2MB よりもはるかに大きくなっています。ダウンロードがほぼ瞬時に行われた場合、ファイルがキャッシュされていることがわかりますが、1MB のファイルは何度も処理さconnection:didReceiveDataれ、最終的にはconnectionDidFinishLoading.

4

1 に答える 1

0

NSURLCache には、どのファイルをキャッシュするかどうかを決定するメカニズムがあります。最大ファイル サイズは、キャッシュのサイズに関連しています。DiskCapacity を 200 MB に設定してみてください。キャッシュされる最大ファイル サイズも増加することがわかります。これを解決する唯一の方法は、独自の NSUrlCache を実装することです。その方法のサンプルを探している場合は、 https://github.com/evermeer/EVURLCacheをご覧ください。

于 2014-05-03T10:42:59.553 に答える