De OSMemoryNotification.h ,
/*
** Threshold values for notifications
*/
typedef enum {
OSMemoryNotificationLevelAny = -1,
OSMemoryNotificationLevelNormal = 0,
OSMemoryNotificationLevelWarning = 1,
OSMemoryNotificationLevelUrgent = 2,
OSMemoryNotificationLevelCritical = 3
} OSMemoryNotificationLevel;
total 5 níveis de aviso de memória (-1,3).
Com relação à descrição do aviso de nível de memória, a resposta de @ KennyTM é excelente.
Quero adicionar vários pontos relacionados que podem ajudar o PM e outros.
O que você deve fazer ao receber um aviso de nível de memória?
Ao receber qualquer um desses avisos, o método do manipulador deve responder liberando imediatamente qualquer memória desnecessária. Por exemplo, o comportamento padrão da classe UIViewController é limpar sua visualização se essa visualização não estiver visível no momento; as subclasses podem complementar o comportamento padrão eliminando estruturas de dados adicionais. Um aplicativo que mantém um cache de imagens pode responder liberando quaisquer imagens que não estejam atualmente na tela.
Como observar o aviso de nível de memória?
De http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Quando o sistema enviar um aviso de pouca memória para o seu aplicativo, responda imediatamente. O iOS notifica todos os aplicativos em execução sempre que a quantidade de memória livre cai abaixo de um limite seguro. (Ele não notifica aplicativos suspensos.) Se seu aplicativo receber esse aviso, ele deve liberar o máximo de memória possível. A melhor maneira de fazer isso é remover referências fortes a caches, objetos de imagem e outros objetos de dados que podem ser recriados posteriormente.
O UIKit fornece várias maneiras de receber avisos de pouca memória, incluindo o seguinte:
- Implemente o método applicationDidReceiveMemoryWarning: do delegado do seu aplicativo.
- Substitua o método didReceiveMemoryWarning em sua subclasse UIViewController customizada.
- Registre-se para receber a notificação UIApplicationDidReceiveMemoryWarningNotification.
Como reduzir a pegada de memória do seu aplicativo?
- Elimine vazamentos de memória.
- Torne os arquivos de recursos os menores possíveis.
- Use Core Data ou SQLite para grandes conjuntos de dados.
- Carregue recursos preguiçosamente.
- Construa seu programa usando a opção Thumb.
Detalhes em http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Como alocar memória com sabedoria?
- Reduza o uso de objetos liberados automaticamente: Com a contagem automática de referência (ARC), é melhor alocar / init objetos e deixar o compilador liberá-los para você no momento apropriado. Isso é verdadeiro até mesmo para objetos temporários que no passado você poderia ter liberado automaticamente para evitar que sobrevivam ao escopo do método atual.
- Imponha limites de tamanho aos recursos : evite carregar um arquivo de recurso grande quando um menor for suficiente. Em vez de usar uma imagem de alta resolução, use uma que seja de tamanho adequado para dispositivos baseados em iOS. Se você deve usar arquivos de recursos grandes, encontre maneiras de carregar apenas a parte do arquivo necessária em um determinado momento. Por exemplo, em vez de carregar o arquivo inteiro na memória, use as funções mmap e munmap para mapear partes do arquivo para dentro e para fora da memória. Para obter mais informações sobre o mapeamento de arquivos na memória.
- Evite conjuntos de problemas ilimitados : Os conjuntos de problemas ilimitados podem exigir uma quantidade arbitrariamente grande de dados para serem computados. Se o conjunto exigir mais memória do que está disponível, seu aplicativo pode não conseguir concluir os cálculos. Seus aplicativos devem evitar esses conjuntos sempre que possível e resolver problemas com limites de memória conhecidos.