didReceiveMemoryWarning でメモリ警告を受け取りました。メモリ警告には、レベル 1、レベル 2 などのさまざまなレベルがあることを知っています。警告レベルを決定する方法はありますか? 例:
if(warning level == 1)
<blah>
didReceiveMemoryWarning でメモリ警告を受け取りました。メモリ警告には、レベル 1、レベル 2 などのさまざまなレベルがあることを知っています。警告レベルを決定する方法はありますか? 例:
if(warning level == 1)
<blah>
お役に立てれば!!!
警告には4つのレベル(0から3)があります。これらはカーネルメモリウォッチャーから設定され、あまり公開されていない関数OSMemoryNotificationCurrentLevel()によって取得できます。
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
レベルがどのようにトリガーされるかは文書化されていません。SpringBoardは、各メモリレベルで次のことを行うように構成されています。
Warning (not-normal) — Relaunch, or delay auto relaunch of nonessential background apps e.g. Mail.
Urgent — Quit all background apps, e.g. Safari and iPod.
Critical and beyond — The kernel will take over, probably killing SpringBoard or even reboot.
メモリ レベルの警告を知る方法がないことはわかっています (プライベート/ドキュメント化されていない API を除く)。したがって、それを使用しないでください。
この質問をチェックして、文書化されていない API を確認してメモリ警告レベルを取得してください。
userInfo
私の最初のアドバイスは、ドキュメントでメモリ警告通知を調査することです (たとえば、存在する場合、その辞書の内容は何ですか)。詳細を提供するかどうかはわかりません。
ただし、最終的には、メモリ警告のレベルを推測するのではなく、最悪の事態を想定して、できるだけ多くの未使用データを解放してください。