ios - Objective-C : How to make a cache without keys

标签 ios objective-c swift caching

我正在尝试制作对象缓存以按需重用。

它有点像 UITableViewCell 机制。当我需要一个新对象时,我将从池中获取一个(我不关心是哪一个),如果没有可用对象,我将创建一个新对象放入缓存中。完成后,我会把它放回池中以备后用。

NSCache 是我所知道的最相似的类,但它是一个键/值缓存,所以它并不完全符合我的想法。我不关心缓存给我哪个对象,我只想从缓存中获取一个(任何一个),使用它,然后在我完成后放回去。

那么这种机制应该用什么?

编辑:它不必来自 iOS 框架。我也对外部开源库开放。

编辑 2:我举个例子来说明: 假设我正在尝试创建一个 Ant 巢(缓存):巢内有大约 10000 只 Ant 。

  • 当我需要食物时,我会抓起一只 Ant 并告诉它出去获取食物( Ant 已从缓存中移除)。我不在乎哪只 Ant 做这项工作,因为它们对我来说都是 Ant 。完成任务后, Ant 会回到巢穴并呆在那里,直到我给它下达新命令。
  • 万一我的巢因为任何原因用完了 Ant (缓存是空的),我会告诉蚁后再繁殖一些。
  • 如果巢穴资源耗尽(收到内存警告),我希望过多的 Ant 自行死亡(类似于 NSCache 的自动内存管理)。
  • 如果没有资源危机, Ant 可以留在原地等待我的命令(我是一个慷慨的上帝)。

最佳答案

使用 NSCache。但是你不想处理 NSCache 的键。

所以 Ant 类是 NSObject 的子类。使用 NSMutableSet 来保存每个 Ant 的 hash。请参阅NSObject 协议(protocol)引用了解hash 方法。

使用 anyObject 从 NSMutableSet 中取出哈希值,使用 addObject: 从 NSMutableSet 中取出哈希值。使用哈希作为 NSCache objectForKey: 的参数。

如果 Ant 对象总数大于 NSMutableSet 的 NSUIntegers,这只会节省内存。

这似乎比尝试使用 NSCache 的线程安全和自动删除创建自定义 NSMutableSet 类更容易。

关于ios - Objective-C : How to make a cache without keys,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660968/

相关文章:

objective-c - 以编程方式选择 UITableViewCell?

ios - 从模态解雇中强制 tableView 重新加载数据?

ios - 在 Github Actions iOS 项目设置过程中,进程已完成,退出代码为 66

iphone - iPhone 项目中的外部静态 (.a) 库

ios - 如何在我的协议(protocol)中正确使用 associatedType

swift - 仅在父 sknode 上运行操作

ios - 当我在 swift (iOS) 中使用 loadHTMLString() 方法时,如何在 UIWebView 中导入 css 文件

android - Flutter - 删除 ListView 中项目之间的空间

iphone - XCode:当用户点击 UITextbox 时显示 UIDatePicker

ios - 你如何在 swift 2 中执行 println()