【发布时间】:2012-03-21 04:48:31
【问题描述】:
我正在将我的项目转换为使用 ARC,但遇到了一个特殊问题。我有一个类管理从网络下载的文件的缓存。每个文件都存储在 iPhone 文件系统中,并在我的管理器类中为它保存一个关联的对象。 其他想要使用文件的对象,向我的经理请求缓存对象,并在需要该文件时保留该对象。
但有时,管理器会清理缓存,删除旧文件。当然,它不应该删除当时正在使用的文件。在 ARC 之前,我通过使用关联对象的 retainCount 检测到:
// if retainCount is 1 then only the cache has a reference to it
if( obj.retainCount <= 1 ) {
[obj deleteFile];
[cache removeObject:obj];
}
效果很好 [是的,我知道有关 retainCount 不可靠性的警告,但根据我的经验,如果 retainCount > 1,你肯定知道不止一个对象保留了它]
但是,对于 ARC,您不能再使用 retainCount。我可以引入我自己的保留计数机制,并要求所有使用文件的对象显式保留和释放文件对象。但这很容易出错,而这正是 ARC 应该解决的问题。
您知道实现相同目标的更好方法吗?
【问题讨论】:
-
唯一值得一提的是retainCount:stackoverflow.com/a/4636477/106435
-
你考虑过NSCache吗?
-
@Caleb:Rob 也给出了这个答案。我不知道,会调查一下。
标签: objective-c cocoa-touch ios5 automatic-ref-counting retaincount