如何迭代NSCache键

10

我需要制作一个类似于NSCache的线程安全字典来保存缓存。然而,偶尔我需要刷新缓存的内容。NSCache没有提供遍历其键的方法。这里有什么替代方案?使用带同步的NSMutableDictionary?


这将需要向NSMutableSet添加键,但当您缓存新内容时,这反过来又需要锁定。因此,我不确定这是否比具有锁定的NSMutableDictionary更好,除非您在从中读取时不需要锁定集合。 - Ali
没错,但正如我所说的那样,NSCache 除了线程安全之外还有一些其他属性,这些属性不像使用 NSMutableDictionary 那么容易复制。 - omz
明白了。感谢讨论这个问题。 - Ali
1
需要进行迭代吗?因为总有“-removeAllObjects”路线,或者您可以查看“NSDiscardableContent”。 - axiixc
1
我认为NSCache中会有一个allKeys和allValues属性...这让人想知道为什么它们不存在。 - Jonny
1个回答

2
NSCache没有这样的API。因此,您应该使用NSMutaleDictionary或NSMapTable实现自己的缓存。主要思想是跟踪添加对象的顺序,并在超过countLimit时删除旧对象。可以使用某些有序结构来按添加顺序存储键,例如NSMutableArray。另外,您应该跟踪内存警告并清理缓存。
为了线程安全,您可以使用任何喜欢的锁(@synchronized、NSLock等)。而且您一定要从可变存储的副本中获取keyEnumerator和objectEnumerator。
您可以查看具有迭代键和对象功能的线程安全实现:VSCache

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接