我试图理解 NSCache 的概念,让我印象深刻的一件事是 NSCache 实例并不能保证将值返回给您之前存储的键。如果它认为此时性能更重要,它甚至可能在您尝试添加它时不存储键值对。
对我来说,这意味着:
- 每个键必须“保存”足够的信息以在必要时生成值
- NSCache 的每个查询,本质上只是一个键的形式,因此应该包含生成相应值所需的所有信息。
- 从以上两点可以说,NSCache 的目的不是在键和值之间建立任何类型的关联——用户必须能够独立于缓存生成值,而使用 NSCache 的唯一目的不是“查找”一些值,而只是用内存换取一些性能提升
所以我的问题是关于存储图像的透明蒙版。最初我以为我只需要使用图像的名称作为键,但从我上面的推论看来这还不够——我还必须包括用于生成遮罩的所有其他参数,例如透明度阈值。这也意味着每次我向缓存请求掩码时,我都必须提供所有参数。我能想到的唯一方法是使用类似的东西NSInvocation
作为键;但这似乎是一个相当笨拙的解决方案。