4

メモリ使用量を減らすための私の探求について、別の質問。私はそれを見て、私のアプリで高メモリ使用量の候補になる可能性がありますUIImageCGImageUIImageを使用する場合は常に、それをusingブロックでラップして、できるだけ早く取得するようにしていDispose()ます。

ただし、多くの場合、UIImageプロパティになりUIImageView.Imageます。UIIImageViewスーパービューからを削除した場合、以前Dispose()Imageプロパティに設定してnullに設定する必要がありますか、それともこの無駄な入力ですか?

4

1 に答える 1

3

ImageプロパティをDispose()することになっていますか

クイックアンサー:いいえ。

長い答え:

UIImageView.Imageプロパティimageselectorは保持されます。(管理側から)破棄しても、のネイティブretainCount(Objective-Cは参照カウント)はUIImage0より大きくなり、(のネイティブ側)UIImageは解放されません。

UIImageView破棄すると、使用されているもの(AppleのObjective-Cコード)が解放され、retainCountが0に達すると、ネイティブに解放されますUIImage

UIImageの必要がなくなってから破棄するまでの間に大きな遅延がある場合はUIImageViewに設定UIImageView.Imageすることをお勧めしますnull。これにより、(ObjCの方法で、つまり、retainCountを1つドロップしてUIImage)解放され、他の場所で使用されていない場合は、(ネイティブに)解放されます。

UIImageViewが破棄されない場合、そのImageプロパティを別のプロパティに設定しても同じ結果になることに注意してくださいUIImage(古いものは解放されます)。

于 2012-05-03T13:34:42.207 に答える