我正在尝试使用最大光盘容量配置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];
答案 0 :(得分:1)
我会发表评论,但是由于不允许,我将其添加为答案。
这似乎是NSURLCache仅允许2GB的情况-超出此值的任何内容都将被静默忽略/失败,并且缓存将不起作用(不会返回任何缓存的响应,也不会将任何内容写入磁盘)。
即使通过指定大于2GB的任何值的容量来尝试使用现有的缓存,也会导致相同的“无效”缓存。
我建议向Apple提交错误,以适当地实现该功能(是我们中的某些人有充分的理由创建大型缓存),或适当地记录其缺点。
此行为在High Sierra(macOS 1.13)中仍然存在,我认为这同样适用于当前版本的iOS(11)。
答案 1 :(得分:0)
根据iTunes Connect Developer Guide,应用程序的大小限制为2 GB。这包括应用程序包,文档文件夹和tmp文件夹,库文件夹(缓存存储在磁盘上)等。