するとendAccessingResources
、アセットはパージの対象になります (保持を保持している他のリクエストがない場合)。ただし、ODR のドキュメントを読んでも、アセットがデバイスからすぐに削除されるとは限りません。
関連するすべてのタグがリクエストによって保持されなくなった場合、アセット パックはパージの対象となります。タグに関連付けられたリソースは、アプリの起動時など、削除されるまでしばらくデバイスに残る場合があります。
そのため、OS がスペースを解放する必要があると判断したかどうかによって、リソースはアプリの終了後も存続し、次にアプリを開いたときにも存在する可能性があります。を使用conditionallyBeginAccessingResourcesWithCompletionHandler
してリソースにアクセスすると、リソースがまだデバイス上にあるかどうかを示すブール値が返されます。そうであれば、すぐに使い始めることができます。そうでない場合は、でダウンロードを開始できますbeginAccessingResourcesWithCompletionHandler
。
リソースが常にそこにあることを保証したい場合は、最初のダウンロードに含めることができます。または、確実に ODR を使用する場合は、ダウンロードしたリソースのコピーを別の場所に作成して永続化する必要があります。
ただし、リソースのコピーを作成すると、デバイス上に 2 つのコピーが作成される可能性があります。1 つはコピーして永続化し、もう 1 つは OS がまだ削除していません。すべての ODR リソースをコピーした後、少なくとも OS がアセットをパージする必要があると判断するまで、最初のダウンロードですべてをコピーした場合の 2 倍のスペースをアプリが占有する可能性があります。
tvOS で ODR を使用すると、OS はアセットをキャッシュに保持しようとするようです。そのため、アプリを次に使用するときに、再ダウンロードする必要なく、できるだけ多くのデータが残っています (複雑なアルゴリズムが存在する可能性があります)。ユーザーが近い将来再びアプリを使用する可能性を判断する背景)。「できるだけ多くのデータをキャッシュに保持する」というこのアプローチは、アプリがアセットを他の場所に永続化しない場合には優れていますが、アプリがアセットをコピーして永続化を保証しようとしている場合には、少し不必要に思えます。
最終的に、メモリに問題がある場合、キャッシュは自動的に消去されます。したがって、ユーザーがアプリを予想よりも大きく見える可能性があるのは表面的な問題にすぎず、その後のある時点で魔法のように小さくなります。 .