我正在将我的项目转换为使用ARC,并遇到了一个特殊问题。我有一个类管理从网络下载的文件缓存。每个文件都存储在iPhone文件系统中,并且关联的对象保存在我的经理类中。 其他想要使用文件的对象,向缓存对象请求我的管理器,并在需要文件的时候保留它。自动引用计数(ARC)和retainCount
但有一段时间,管理器清理缓存,删除旧文件。当然,它不应该删除当时正在使用的文件。 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:http://stackoverflow.com/a/4636477/106435 – vikingosegundo 2012-03-02 17:30:39
你有没有考虑过[NSCache](https://developer.apple.com/library/ios/) #文档/可可/参考/ NSCache_Class /参考/的reference.html)? – Caleb 2012-03-02 17:39:27
@Caleb:Rob也给出了这个答案。我不知道它,并会研究它。 – fishinear 2012-03-02 18:06:36