如何迭代NSCache密钥

Ali*_*Ali 9 objective-c nscache

我需要创建一个像NSCache这样的字典,这对于保持cahce来说是线程安全的.但是,偶尔,我需要刷新Cache的内容.NSCache不提供迭代其键的方法.这里会有什么替代方案?NSMutableDictionary与同步?

J. *_*Doe 2

NSCache没有这样的API。因此,您应该使用 NSMutaleDictionary 或 NSMapTable 实现自己的缓存。主要思想是跟踪添加对象的顺序,并在超出 countLimit 时删除较旧的对象。这可以使用一些按添加顺序存储键的有序结构来完成,例如 NSMutableArray。另外,您应该跟踪内存警告并清理缓存。

为了线程安全,您可以使用任何您喜欢的锁(@synchronized、NSLock 等)。您绝对应该从可变存储的副本中获取 keyEnumerator 和 objectEnumerator 。

您可以查看具有迭代键和对象能力的线程安全实现:VSCache