プロジェクトを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が解決することになっている種類のことです。
同じことを達成するためのより良い方法を知っていますか?