我正在将我的项目转换为使用 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 应该解决的问题。
您知道实现相同目标的更好方法吗?