imageNamed:
メソッドを使用して画像が読み込まれると、UIImageが画像データをキャッシュすることはよく知られています。
From Apple documentation: https://developer.Apple.com/documentation/uikit/uiimage/1624146-imagenamed から
imageNamed:
Discussion:このメソッドは、指定された名前の画像オブジェクトをシステムキャッシュで検索し、存在する場合はそのオブジェクトを返します。一致する画像オブジェクトがまだキャッシュにない場合、このメソッドは指定されたファイルcachesから画像データをロードしますitそして、結果のオブジェクトを返します。
そのため、いくつかのイメージをimageNamed:
でロードした後、メモリ使用量が大幅に増加し、イメージをロードしたコントローラの割り当てを解除した後もメモリが使用され続けていることに気付きました。 (少なくとも、同じコントローラを割り当てても、それは再び増加しませんでした)
アプリケーションのライフサイクルの任意の時点でプログラムによってUIImageによって使用されるキャッシュをクリアする方法、または一部のキャッシュパラメーター(たとえば、使用できる最大メモリなど)を制御する方法があるのかと疑問に思いました
initWithData
の代わりにimageWithData
、imageWithContentsOfFile
、imageNamed
またはその他の初期化子を使用することでこの問題を簡単に解決できることはわかっていますが、このキャッシュ動作が望ましいですUITableView
内など、複数の画像を使用する場合。
それを達成する方法について何か考えはありますか?
編集:いくつかの回答の後、私は何かをする必要があることと何かをする可能性を持っていることの間に大きなギャップがあることを明確にしたいだけです。私が指摘したように、私はOSが私のためにそのキャッシュを処理することを知っています、私はiOS SDKが課す制限を見ようとしているだけです。
Kevin Low コメントからの回答
プライベートAPIを使用できる場合(たとえば、アドホックのみのアプリの場合)、これを使用します UIImage
method =キャッシュからすべての画像を削除する
[UIImage _flushSharedImageCache];
このiOS管理のキャッシュを手動でクリアする方法を知る方法はありません。一般的に、これは赤いニシンです。 OSがあなたのために何かを管理するとき、あなたはそれについて心配する必要はありません。割り当て/保持しているメモリを適切に解放し、メモリ警告を適切に処理している限り、自分の役割を果たしています。
キャッシュは、必要なとき、つまりアプリケーションがメモリ不足の警告を受け取ったときに空になります。これを自分で行う理由はなく、公開されているAPIもありません。