无法配置超过2GB discCapacity的NSURLCache

时间:2013-10-29 16:32:01

标签: ios afnetworking cfnetwork nsurlcache

我正在尝试使用最大光盘容量配置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];

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

答案 1 :(得分:0)

根据iTunes Connect Developer Guide,应用程序的大小限制为2 GB。这包括应用程序包,文档文件夹和tmp文件夹,库文件夹(缓存存储在磁盘上)等。