De que maneiras é possível detectar fugas de memória numa aplicação iOS?
sobes.tech IA
Resposta da IA
-
Instrumentos (Fugas): A ferramenta principal no Xcode para perfilamento e deteção de fugas de memória. Mostra as fugas detectadas, referências cíclicas e outros problemas de gestão de memória.
-
Gráfico de memória no Navegador DEBUG: Representação visual do gráfico de objetos em memória durante a execução da aplicação. Ajuda a identificar referências cíclicas que impedem o ARC de libertar objetos. Pode ser usado para procurar objetos sem referências.
-
Address Sanitizer (ASan): Ferramenta durante a compilação e execução que detecta erros de memória, incluindo uso após libertação, libertação dupla e estouro de buffer no heap. Embora não procure fugas diretamente, ajuda a encontrar erros que podem levar a fugas.
-
Analizador estático: Ferramenta integrada no Xcode para análise estática do código, que pode detectar problemas potenciais de memória, incluindo erros no contagem de referências e variáveis não inicializadas, antes de executar a aplicação.
-
Heaps: No Instruments, mostra todos os objetos vivos em memória e as suas ligações. Útil para identificar objetos que deveriam ser eliminados mas ainda existem.
-
Código personalizado para rastreamento de referências: Implementação de mecanismos próprios para rastrear o ciclo de vida dos objetos, como registar os seus métodos
deinit, para identificar objetos que não são libertados como esperado.
class MyObject {
init() {
print("MyObject initialized")
}
deinit {
print("MyObject deinitialized") // Deve ser chamado ao libertar
}
}
-
Testes unitários/UI: Criação de testes especializados que verificam se os objetos são libertados corretamente após a conclusão do seu ciclo de vida ou execução de uma tarefa específica. Executar esses testes com Instrument Leaks ou Memory Graph ativados.
-
Revisão de código: Revisão regular do código para detectar potenciais problemas de gestão de memória, como referências cíclicas fortes, uso incorreto de closures (listas de captura) e delegados.
-
Verificação de referências fracas e referências sem propriedade: Garantir que as referências a delegados, closures e outros objetos que possam criar referências cíclicas estejam corretamente marcadas como
weakouunowned.
class Parent {
var child: Child?
}
class Child {
weak var parent: Parent? // Uso de weak para evitar ciclos
}