【发布时间】:2011-11-02 05:52:40
【问题描述】:
尽管 Apple 在 iOS 上的文档 indicating otherwise、NSURLCache 根本不做任何磁盘(闪存)缓存。您可以将NSURLCache 子类化以更改获取和存储操作的行为以使用磁盘(就像SDURLCache 所做的那样),但是由于以下对缓存的使用和实现方式的严重限制,这不起作用正如你所料:
-
NSURLConnection甚至不会调用storeCachedResponse:forRequest:来处理超过 50KB(确切地说是>= 52428 字节)的文件。这使得子类化NSURLCache对我们的使用(200KB 图像)毫无意义,因为它甚至不会进入缓存。因此,我们必须在NSURLConnection以上的级别手动添加缓存。 - 即使手动调用 NSURLCache 的内置
storeCachedResponse:forRequest:,它也只会在小于 180KB 的情况下将响应存储在内存中。我通过手动调用 storeCachedResponse 对此进行了测试,发现之前/之后currentMemoryUsage对于超过 180KB 的数据长度没有改变。所以我们也必须编写自己的 LRU 内存缓存。
还有其他人注意到这些问题吗?还是我缺少什么?
仅供参考,我在模拟器和 iPad 2 上运行 iOS 4.3。
【问题讨论】:
标签: objective-c ios caching nsurlconnection nsurlcache