1

したがって、MKPolygonViews のヒープがオーバーレイされたマップがあります。私がいくつか置くと、少しチャグします。そして、それらをすべてシステムに置くと、オーバーレイを削除することで応答したシステムに didReceiveMemoryWarning が送信されます。

これが発生したときに実際にどれくらいのメモリを使用していたのか疑問に思いました.10MBの実メモリと100MBの仮想メモリだけです. 当時の SMS アプリは 30MB のメモリを使用していましたが、正常に動作していました。私のアプリ以外にも、メールのような他のアプリがあります。SpringBoard は 5MB 上昇するので、特別なことはありません。これは iPhone 4 でも実行されているため、十分なメモリが残っているはずです (私の計算ではまだ約 256MB の空き容量があります)。

オーバーレイを削除した後、メモリ フット プリントは約 1MB しか減りませんが、オーバーレイを元に戻すと 1MB 増えるので、何も異常はありません。

それで、何が起こっているのですか?メモリの警告は、おそらくグラフィック メモリか何かから来ていますか? これらのオーバーレイでのパフォーマンスは、グラフィック プロセッサによって制限されますか? それらをすべてオンにすると、動き回るときに約 60% を使用しますが、パフォーマンスが悪い理由にはなりません。

答えへの方向性は高く評価されます。

編集: Springboards 仮想メモリは、オーバーレイをオンにすると 450MB まで上昇し、512MB に達するとすぐにメモリ警告を送信します。これが問題の原因ですか?VM の合計は常に 512 MB を超えているため、VM にフラッシュ ストレージを使用している必要があるため、メモリ警告は発生しません。

4

3 に答える 3

1

解決策は、すべてのMKPolygonViewを1つのMKpolygonViewにマージすることでした。詳細については、こちらをご覧ください

于 2010-09-17T00:42:21.263 に答える
0

現在の地図に実際に表示されているオーバーレイ ビューのみを表示して、そのコードを最適化する必要があります。ユーザーが見ていない地図の領域にオーバーレイ ビューを追加しても意味がありません。

于 2010-08-23T02:13:50.867 に答える
0

私が気づいたことの 1 つは、マップビューからオーバーレイ (mkpolygon など) を単に削除するだけでは十分ではないということです。少なくとも2つのことが起こっていません...

  1. すべてのメモリを解放しているわけではありません
  2. マップ ビューからオーバーレイを完全にきれいにクリアしていない

これは、特に多数の大きなオーバーレイを扱う可能性がある場合に、多くの問題を引き起こします。これに対抗するためにいくつかのことをしました。

  1. AppleDevForum の投稿で提案されているように、それらすべてを 1 つの MKPolygonView または「MultiPolygonView」に詰め込むことはできませんでした。iOS 3.2 をターゲットにしているため、これらの「iOS 4 のみ」のクラスをサブクラス化することはできません。3.2 でも引き続き使用できます。それらをサブクラス化しないでください
  2. ポリゴン内の座標の数が非常に多いため、画面上の数をいつでも 2 つに制限することにしました。たまたま、私のアプリケーションでは、これは適切な期待でした。そこで、2 つのポリゴン ビューをマップ ビュー コントローラーのプロパティとして保存し、必要に応じて再利用します。
  3. メモリを解放する必要があるとき (頻繁に!)、またはポリゴンを変更する必要があるときはいつでも、まず[polygonView invalidatePath] を呼び出して適切なポリゴン ビューパスを無効にします。その後、polygonview プロパティをリセットし、マップ ビューからオーバーレイを削除します (必要に応じてオーバーレイを再作成する前に)。

これは、画面上のポリゴン オーバーレイを変更し、古いポリゴンをきれいに消去し、強制的にメモリを解放する唯一の方法でした。

それをすべて行うためのより良い、より効果的な方法があれば、もちろん、私は提案を受け入れます!

于 2010-10-10T20:34:19.037 に答える