5

GCDを使用してメモリの圧力通知を取得しています。GCDからメモリ圧力通知に応答する方法は?

DISPATCH_MEMORYPRESSURE_WARN

条件が警告段階であるシステムメモリ圧力:

GCD documentationはそうのようないくつかの定数を記載しています。 Apps は、今必要でないメモリを解放する必要があります。

DISPATCH_MEMORYPRESSURE_CRITICAL

システムメモリ圧力条件は重要な段階です。 Apps はできるだけ多くのメモリを解放する必要があります。

未使用のメモリを解放する必要があると思われます。しかし、他の場所(man pagessource code)私はこれらの定数に関連したこのノートを見つけるには:

上昇メモリ圧力がこのソースで登録されているアプリケーション が自分の将来 メモリを変更することによって反応する必要があり、システム全体の状態があります使用行動メモリ圧力が正常に戻るまで、新たに開始された操作のキャッシュサイズを縮小することによって、

すなわち がさらにさらにTHERシステムメモリ圧力を悪化させるであろうことはVMの動作をトリガする可能性があるようなシステムシステムTEMメモリ圧力は、 上昇状態になったときしかし、アプリケーションは、過去の操作のための既存のキャッシュ を通過し、廃棄しないべきです。

これは私を混乱させます。だから、私はメモリを解放すべきですか?それとも、新しいメモリの割り当てを止めるべきですか?

答えて

0

MacOSには、バッキングストアを使用する仮想メモリ(VM)システム(ファイルシステム)があります。ファイルシステムは、現在使用されていないメモリを保持するために使用されます。システムが実メモリ(RAM)上で低速で実行されている場合、メモリ内の活発に使用されていないものはディスクに書き込まれ、後でRAMに戻されます。

iOSには仮想メモリシステムがありますが、バッキングストアはありません。メモリが不足すると、システムはメモリの使用量を減らすようにアプリケーションに要求します。それが十分なメモリを解放しない場合、システムはアプリケーションを殺すのを開始します。

libdispatchヘッダーから引用しているガイダンスは、iOSではなくMacOS仮想メモリシステムを指しています。

iOSアプリケーションの場合廃棄オブジェクトおよびメモリ警告を処理するときにキャッシュサイズを小さくします。ダーティ(非掃除可能)メモリを使用しているオブジェクトには特に注意する必要があります。これは、システムがそれ自身で自動的に再利用することができないメモリであり、最初にアプリケーションによって破棄されなければならない。典型的なiOSアプリケーションでは、画像(写真)は最も汚れたメモリを使用します。

関連する問題