前のimageView.Imageが占有していたメモリをすぐに解放しますか?
すぐではありませんが、ガベージ コレクターを待つよりもはるかに高速です。
を呼び出すと、マネージ参照がネイティブDispose
にドロップされます。他に (ネイティブに) (RetainCount == 0) への参照がない場合は、解放されます (ObjC 参照カウント)。 UIImage
UIImage
あなたのコードでは、そのプロパティがに設定されるimageView
まで、まだそれへの参照があります。Image
newImage
もしそうなら、よりクリーンな解決策はありますか?
あまり。GC に作業を任せると見た目がきれいになりますが、画像が非常に大きくなる可能性があり、できるだけ早く解放する価値があります。
また、ローカル変数を追加して (他のネイティブ参照が存在しない場合) 画像がすぐに解放されるようにすることは、実際には価値がありません (とにかくクリーンではありません)。これは次の行で行われます。
これは NSAutoreleasePool と関係がありますか?
なんでも ?どちらの場合もメモリに関連しています。
イメージを作成すると、現在のイメージが使用 (キャッシュ)NSAutoreleasePool
され、最終的には排出されます。大量のもの (ループなど) を処理する場合は、多くの場合、より高速なドレインを確保するために、独自の短期間のプールを持つ価値があります。
いくつかの API (多くのメモリを必要とすることはよく知られています) は、自動的に (btouch) を追加する属性で装飾されていますが、どれNSAutoreleasePool
を見つけるのは簡単ではありません。
Apple Instruments を使用して測定した方がよいとは思えません...