0

多くのオブジェクトを含むモノタッチ アプリケーションがUIImageありUIViewます。iPad (Version1) にアプリケーション (IPA) ファイルをインストールして作業を開始すると、10 ~ 20 分連続して作業を続けると、メモリ不足でクラッシュしました。

ヒープ割り当てを追跡するために Intruments プロファイルも試しましたが、画面のナビゲーションごとにメモリが増え続けていることがわかりました。viewDidDisappearに割り当てられたすべてのオブジェクトを破棄しましたが、メモリは減少しませんでした。また、 GC.Collect()を介して手動でガベージ コレクターにガベージを収集させようとしますが、これも機能しません。

これはモノタッチのバグですか?または、メモリ管理手法を見逃していませんか?

メモリ不足の警告の問題を修正するのを手伝ってください..

ありがとう

4

1 に答える 1

3

で作業するときはUIImageUIImageViewコードをusingステートメントにラップするか、画像が不要になった場合は手動で破棄する必要があります。その理由は、UIImage のマネージ バージョンは基本的に、画像データを保持するメモリ領域へのポインタである 4 バイトだけで構成されるためです。イメージ自体は管理されていません。これは、GC が管理対象の世界しか認識しないため、GC に負担がかからないことを意味します。すべての画像データをメモリに保持する必要があるためにそれができない場合は、設計を再考する必要があります。iOS デバイスには非常に限られた量の RAM しかありません。デバイスに .NET の全機能を適用できるからといって、それを行う必要があるという意味ではありません。良い記憶市民になるようにしてください。

using(UIImage image = UIImage.FromFile(...))
{
  // Process the image.
}

// Here, the image data will be freed.
于 2013-07-31T11:23:28.467 に答える