0

didReceiveMemoryWarning でメモリ警告を受け取りました。メモリ警告には、レベル 1、レベル 2 などのさまざまなレベルがあることを知っています。警告レベルを決定する方法はありますか? 例:

if(warning level == 1)
    <blah>
4

4 に答える 4

2

お役に立てれば!!!

警告には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.
于 2012-07-18T10:41:06.993 に答える
1

メモリ レベルの警告を知る方法がないことはわかっています (プライベート/ドキュメント化されていない API を除く)。したがって、それを使用しないでください。

この質問をチェックして、文書化されていない API を確認してメモリ警告レベルを取得してください。

于 2012-07-18T10:23:50.500 に答える
0

userInfo私の最初のアドバイスは、ドキュメントでメモリ警告通知を調査することです (たとえば、存在する場合、その辞書の内容は何ですか)。詳細を提供するかどうかはわかりません。

ただし、最終的には、メモリ警告のレベルを推測するのではなく、最悪の事態を想定して、できるだけ多くの未使用データを解放してください。

于 2012-07-18T09:25:36.833 に答える