这可能是预期的行为,但Apple没有明确说明。
我正在使用NSCache
为我的UICollectionView
缓存一些图片。当我将应用程序放在后台并立即再次打开时,我的所有图像都不在NSCache
中。
理想情况下,我希望最近加载的图像保持缓存状态,这样当用户重新打开应用程序时,他们不必再支付再次加载所有图像的费用。似乎NSCache
应该允许不那么激进的缓存策略。
我只是想在这里发帖进行一次健全检查,并确保我没有遗漏任何明显的东西。
否则,我将不得不实现我自己的缓存,只将最后25个加载的图像保存在NSMutableDictionary
缓存中。
答案 0 :(得分:3)
苹果医生说:
NSCache类包含各种自动删除策略 确保它不会占用太多的系统内存。该 如果需要内存,系统会自动执行这些策略 其他应用。调用时,这些策略会删除一些项目 从缓存中,最小化其内存占用。
所以它删除了一些项目,而不是所有项目。它取决于NSCache内部策略,可用内存,设备状态等。另外,还要阅读一下NSDiscardableContent协议。
来自文档:
默认情况下,缓存中的NSDiscardableContent对象是 如果丢弃其内容,则自动从缓存中删除 虽然可以更改此自动删除策略。如果 NSDiscardableContent对象被放入缓存中,缓存调用 discardContentIfPossible它被删除。
答案 1 :(得分:3)
看起来您需要为放在NSCache中的对象实现NSDiscardableContent协议。当缓存中的对象不符合NSDiscardableContent时,他们会根据此答案在应用程序的背景上被驱逐。 https://stackoverflow.com/a/13579963
答案 2 :(得分:0)
我也遇到同样的问题,“当应用程序进入后台时,NSCache中的缓存图像被驱逐了”。我确实创建了一个示例来处理此问题,可在github中找到 https://github.com/SurendraK11/CachingImage/tree/master/CachingImages
不要在这里导入东西,UIImage不会直接缓存到NSCache中。将其包装到CacheItem泛型类中,该类确认NSDiscardableContent,其中isContentDiscarded返回false,beginContentAccess返回true
有关NSDiscardableContent https://developer.apple.com/documentation/foundation/nsdiscardablecontent
的更多信息