9

これは予想される動作である可能性がありますが、Apple によって明確に述べられていません。

NSCacheのいくつかの画像をキャッシュするために使用していUICollectionViewます。アプリをバックグラウンドに置いて再度 (すぐに) 開くと、すべての画像がNSCache.

理想的には、最近読み込まれた画像をキャッシュしたままにして、ユーザーがアプリを再度開いたときに、すべての画像を再度読み込むコストを支払う必要がないようにしたいと考えています。NSCacheあまり積極的でないキャッシング ポリシーを許可する必要があるようです。

健全性チェックのためにここに投稿し、明らかなものを見逃していないことを確認したかっただけです。

それ以外の場合は、最後に読み込まれた 25 個の画像をキャッシュに保持する独自のキャッシュを実装する必要がありNSMutableDictionaryます。

4

3 に答える 3

3

アップルのドキュメントには次のように書かれています。

NSCache クラスにはさまざまな自動削除ポリシーが組み込まれており、システムのメモリを過度に使用しないようになっています。他のアプリケーションがメモリを必要とする場合、システムはこれらのポリシーを自動的に実行します。これらのポリシーが呼び出されると、キャッシュからいくつかのアイテムが削除され、メモリ フットプリントが最小限に抑えられます。

したがって、すべてのアイテムではなく、一部のアイテムが削除されます。これは、NSCache の内部ポリシー、使用可能なメモリ、デバイスの状態などによって異なります。また、NSDiscardableContent プロトコルについても少し読んでください。

ドキュメントから:

デフォルトでは、コンテンツが破棄された場合、キャッシュ内の NSDiscardableContent オブジェクトはキャッシュから自動的に削除されますが、この自動削除ポリシーは変更できます。NSDiscardableContent オブジェクトがキャッシュに入れられた場合、キャッシュはその削除時にその上で discardContentIfPossible を呼び出します。

于 2013-11-11T04:04:54.593 に答える
0

「アプリがバックグラウンドになると、NSCache にキャッシュされた画像が削除される」という同じ問題もありました。この問題を処理するための例を作成しました。これは、github https://github.com/SurendraK11/CachingImage/tree/master/CachingImagesで入手できます。

インポートはここではありません。UIImage は NSCache に直接キャッシュされません。これは、isContentDiscarded が false を返し、beginContentAccess が true を返す NSDiscardableContent を確認する CacheItem ジェネリック クラスにラップされます。

NSDiscardableContent に関する詳細情報https://developer.apple.com/documentation/foundation/nsdiscardablecontent

于 2019-05-03T15:38:50.953 に答える