0

iOS 5.1 が期待どおりにメモリを管理していないことに驚いています。デバイスが多くのアプリを実行している場合、iOS はバックグラウンドでメモリを大量に消費するアプリを強制終了しないように見えますが、自分のアプリにもメモリ警告を送信します。

たとえば、2 つのテスト デバイスで UIImagePicker がアプリをクラッシュさせたことを示しています。ホーム キーをダブルタップしてバックグラウンド アプリの一部を強制終了すると、アプリがメモリ警告を受けてクラッシュするのを防ぐことができます。

iOS がメモリを解放しないかどうか迷っています。メモリが不足していて、バックグラウンド タスクの一部を強制終了する必要があることをユーザーに通知するアラート ビューを表示してもよいですか?

私はそのようなイベントを処理する方法を失っています - iOS がメモリをクリーンアップするのに時間がかかりますか (アプリがメモリ警告に応答している間)?

4

1 に答える 1

5

iOS は、バックグラウンドのアプリを強制終了するなど、メモリの警告を表示する前に多くのことを行います。iOS 5 以降、iOS はメモリ警告でユーザーを悩ませることさえ可能な限り減らしています。つまり、メモリを使用しているが現在は必要のないものを取り除く必要がある場合にのみ、警告が表示されます。何時間もかけずに、将来安全に再作成できます)。最初にメモリ警告を表示せずにアプリがクラッシュした場合、システムがメモリ不足であることを通知できないほど多くのメモリを割り当てた可能性があります。この理由は、メモリ警告がメインスレッドのランループでスケジュールされており、ランループに別の反復を行う時間を与えるまで、警告は表示されません。

また、Apple は、メモリに問題があることをユーザーに伝えることを好みません。ユーザーではなく、それに対処しなければならないのはあなたのアプリです!したがって、レビュー チームがアプリをレビューしているときにメモリ警告が表示された場合、アプリが拒否されるのと非常によく似ています (噂によると、これらの警告は、アプリがどのように反応するかをテストするために送信されるとのことです)。

要約すると、iOS は期待どおりに動作し、可能なものを強制終了し、他のシステム デーモンをシャットダウンすることさえできます。これが発生した後で初めて、メモリが不足していることが通知されます。これらの警告に対応する正しい方法は、できるだけ多くのメモリを解放し、将来簡単に再作成できる大きなものから始めることです (たとえば、アプリに大量の画像が表示されているが、一度にすべてが表示されない場合)。 、現在表示されていないものを破棄します)。ユーザーに問題に対処する方法が間違っていると伝えるのは間違っているし、Apple はそれを好まないので、自分で問題を解決するようにしてください。

于 2012-07-27T01:35:04.520 に答える