Melhor estratégia de alocação de memória para iOS?

7

Estou me debatendo sobre alocação de memória no iOS. Eu escrevo a maior parte do meu código em C ++ e gosto muito de usar ObjectPools, FreeLists etc. partículas, entidades do jogo etc.).

Ainda no iOS, não é como se estivéssemos desenvolvendo para um console como o PSP, onde posso saber de fato que vou receber uma quantidade fixa de memória. iOS, emitirá "avisos de memória" quando o sistema precisar de memória.

Alguém tem alguma sugestão sobre isso? É muito sério, já que o novo iPod touch / iPhone 4 está carregando mais RAM? ou ainda é uma grande preocupação?

Mr.Gando
fonte

Respostas:

10

Use seu senso comum de gerenciamento de memória. Use pools / freelists para coisas que são frequentemente alocadas e desalocadas (ou seja, partículas), blocos de memória livre que não estão em uso. No entanto, não tente pré-alocar grandes pedaços de memória antecipadamente. O iOS não garante memória nem troca, portanto, qualquer memória alocada está tirando recursos do sistema e de outros aplicativos. Se o sistema não conseguir memória suficiente porque seu aplicativo está sobrecarregando tudo, ele recorrerá à morte do aplicativo. Você deve manipular o applicationDidReceiveMemoryWarning para o que foi projetado, desalocando o máximo de memória possível. Embora o iPhone 4 tenha muita memória, mas com todos os recursos de multitarefa e a maneira como as pessoas costumam usá-los, você pode realmente ter menos memória do que imagina.

(Além disso, não se esqueça de criar um perfil no seu aplicativo para ver se a alocação de memória é um gargalo!)

5ound
fonte
1

Para aderir a uma nota à resposta de 5ound: preste atenção ao nível do aviso de memória. Antes do iOS 3.2, não havia como distinguir entre avisos de gravidade diferente (ou seja, o SO está apenas sentado em um monte de UIImages que ele pode limpar ou não resta realmente memória?). no 3.2 em diante, você pode verificar o nível do aviso de memória para determinar como reagir. Na minha experiência, os avisos de nível 1 são constantes, inevitáveis ​​e, em grande parte, sem sentido; portanto, eu não tomaria medidas drásticas em resposta a eles. Embora os avisos de nível 2 não sejam necessariamente um sinal de destruição iminente, você provavelmente deve levá-los a sério e começar a limpar os caches que puder, etc.

Há uma boa discussão dos diferentes níveis aqui: /programming/2915247/iphone-os-memory-warnings-what-do-the-different-levels-mean

PS - Este é mais um comentário à resposta da 5ound, mas não tenho representante suficiente para comentar, então essa foi minha única opção ...

Mattia
fonte
E para continuar: o iOS 5 trata os avisos de memória de maneira um pouco diferente.
David Dunham