Em relação à arte negra de gerenciar memória em dispositivos iPhone OS: o que significam os diferentes níveis de aviso de memória. Nível 1? Nível 2? O dial vai para 11?
Contexto: Depois de um extenso período de teste de estresse de memória - incluindo a execução do meu aplicativo para iPad com o aplicativo reprodutor de música do iPod em execução, estou inclinado a ignorar os avisos de memória aleatórios, mas raros, que estou recebendo. Meu aplicativo nunca falha. Sempre. Meu aplicativo está livre de vazamentos. E, bem, os avisos dos memes simplesmente não parecem importar.
Obrigada
doug
fonte
Avisos de nível de memória são registrados por SpringBoard. Como desenvolvedor de aplicativos, você não precisa se preocupar com isso. Basta responder a
-{application}didReceiveMemoryWarning
isso.Existem 4 níveis de avisos (0 a 3). Eles são definidos no observador de memória do kernel e podem ser obtidos pela função não tão pública
OSMemoryNotificationCurrentLevel()
.O modo como os níveis são acionados não é documentado. SpringBoard é configurado para fazer o seguinte em cada nível de memória:
Matar o aplicativo ativo (jetsam) não é feito pelo SpringBoard, mas
launchd
.fonte
libsystem_c.dylib
. Seria ótimo se eu pudesse usar isso. ObrigadoDe OSMemoryNotification.h ,
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:
Como reduzir a pegada de memória do seu aplicativo?
Detalhes em http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/PerformanceTuning/PerformanceTuning.html
Como alocar memória com sabedoria?
fonte