Da OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
totale 5 livelli di avviso di memoria (-1,3).
Per quanto riguarda la descrizione dell'avviso sul livello di memoria, la risposta di @ KennyTM è eccellente.
Voglio aggiungere diversi punti correlati che possono aiutare PM e altri.
Cosa dovresti fare quando hai un avviso sul livello di memoria?
Dopo aver ricevuto uno di questi avvisi, il metodo del gestore dovrebbe rispondere liberando immediatamente tutta la memoria non necessaria. Ad esempio, il comportamento predefinito della classe UIViewController consiste nell'eliminare la sua vista se quella vista non è attualmente visibile; le sottoclassi possono integrare il comportamento predefinito eliminando strutture di dati aggiuntive. Un'app che mantiene una cache di immagini potrebbe rispondere rilasciando tutte le immagini che non sono attualmente sullo schermo.
Come osservare l'avviso del livello di memoria?
Da http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Quando il sistema invia un avviso di memoria insufficiente alla tua app, rispondi immediatamente. iOS avvisa tutte le app in esecuzione ogni volta che la quantità di memoria libera scende al di sotto di una soglia di sicurezza. (Non notifica le app sospese.) Se la tua app riceve questo avviso, deve liberare quanta più memoria possibile. Il modo migliore per farlo è rimuovere i riferimenti forti a cache, oggetti immagine e altri oggetti dati che possono essere ricreati in seguito.
UIKit offre diversi modi per ricevere avvisi di memoria insufficiente, inclusi i seguenti:
- Implementa il metodo applicationDidReceiveMemoryWarning: del tuo delegato dell'app.
- Sostituisci il metodo didReceiveMemoryWarning nella tua sottoclasse UIViewController personalizzata.
- Registrati per ricevere la notifica UIApplicationDidReceiveMemoryWarningNotification.
Come ridurre l'impronta di memoria della tua app?
- Elimina le perdite di memoria.
- Rendi i file di risorse più piccoli possibile.
- Usa Core Data o SQLite per set di dati di grandi dimensioni.
- Carica le risorse pigramente.
- Crea il tuo programma utilizzando l'opzione Thumb.
Dettagli su http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Come allocare la memoria con saggezza?
- Riduci l'uso di oggetti rilasciati automaticamente: con il conteggio automatico dei riferimenti (ARC), è meglio allocare / inizializzare gli oggetti e lasciare che il compilatore li rilasci al momento opportuno. Questo è vero anche per gli oggetti temporanei che in passato potresti essere stato rilasciato automaticamente per impedire loro di vivere oltre l'ambito del metodo corrente.
- Imponi limiti di dimensione sulle risorse : evita di caricare un file di risorse di grandi dimensioni quando ne andrà uno più piccolo. Invece di utilizzare un'immagine ad alta risoluzione, utilizzane una di dimensioni adeguate per i dispositivi basati su iOS. Se devi utilizzare file di risorse di grandi dimensioni, trova i modi per caricare solo la parte del file di cui hai bisogno in un dato momento. Ad esempio, invece di caricare l'intero file in memoria, usa le funzioni mmap e munmap per mappare parti del file dentro e fuori la memoria. Per ulteriori informazioni sulla mappatura dei file in memoria.
- Evita insiemi di problemi illimitati : gli insiemi di problemi illimitati potrebbero richiedere una quantità arbitrariamente grande di dati da calcolare. Se il set richiede più memoria di quella disponibile, l'app potrebbe non essere in grado di completare i calcoli. Le tue app dovrebbero evitare tali set quando possibile e lavorare su problemi con limiti di memoria noti.