0

我正在尝试使用可能的最大磁盘容量来配置 NSURLCache。我在 iOS 7 上。

根据文档,NSURLCache 的 discCapacity 属性是一个 NSUInteger,也就是 unsigned int,它应该接受最大值 4,294,967,295 (0xFFFFFFFF)。但是,使用任何高于 0x7FFFFFFF (2147483647) 的值都会导致该值实际报告为 0,并且磁盘缓存根本不工作。

此外,使用 0x7FFFFFFF (2GB) 实际上会在磁盘缓存填满接近 2GB 的任何地方时导致 malloc 错误。

我发现这个工作的唯一方法是最大值为 1GB (1073741824)。使用此值时,一切都按预期工作。

我想为我的应用程序使用尽可能多的磁盘容量的 NSURLCache。我如何使用 8 甚至 16GB?

更新[按照评论中的要求添加代码示例]:

NSURLCache* sharedCache = [[NSURLCache alloc] initWithMemoryCapacity:sizeInBytes
                                                        diskCapacity:sizeInBytes
                                                            diskPath:@"somepath"];

[NSURLCache setSharedURLCache:sharedCache];

或者你也可以这样做:

[[NSURLCache sharedURLCache] setDiskCapacity:sizeInBytes];
[[NSURLCache sharedURLCache] setMemoryCapacity:sizeInBytes];
4

2 回答 2

1

我会发表评论,但由于不允许我将其添加为答案。

这似乎是 NSURLCache 只允许 2GB 的情况 - 任何高于此值的内容都将被静默忽略/失败,并且缓存将不起作用(不会返回任何缓存的响应,也不会将任何内容写入磁盘)。

即使尝试通过为容量指定大于 2GB 的任何值的路径来使用现有缓存,也会导致相同的“非工作”缓存。

我建议向 Apple 提交一个错误,以正确实现该功能(是的,我们中的一些人有正当理由创建大型缓存),或正确记录其缺点。

这种行为仍然存在于 High Sierra (macOS 1.13) 中,我认为这同样适用于当前版本的 iOS (11)。

于 2018-08-17T17:20:22.430 回答
0

根据iTunes Connect 开发人员指南,应用程序的大小有 2 GB 的硬性限制。这包括应用程序包、文档文件夹和 tmp 文件夹、库文件夹(缓存存储在磁盘上)等。

于 2013-10-29T16:54:53.833 回答