2

在 iOS 上,我正在尝试NSURLConnection从 Web 服务器加载数据,这些数据只是 PNG 文件。

所有文件都将被缓存,除了一个大小为 1,173,084 字节的文件(大约 1MB)。

我正在循环 6 个文件:pic1.png、pic2.png、... 3、4、5、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 回答