ARC-Automatic Reference Count
O obejtivo do ARC é gerenciar automaticamente o número de count de determinado objeto criado e quando o mesmo não é utilizado, ele libera a memória (...)
Autor: Redação Impacta
Dessa vez falaremos de um tema muito importante recentemente, no mundo mobile, que é o ARC “Automatic Reference Count “. Descobriremos qual a relevância disso em um app para iphone e como o ARC funciona e ajuda a vida do desenvolvedor.
Antes de falar de ARC, é necessário entender um sistema chamado MRC “Manual Reference Count”.
No iOS, toda vez que vamos utilizar um objeto, temos que informar ao sistema que usaremos um determinado espaço de memória e que ele precisa ser reservado. Funciona mais ou menos como reservar um quarto de hotel onde você liga para pra o hotel (no caso, o sistema), e avisa que vai ocupar um quarto por um período especifico de dias.
Logo, o hotel reserva esse quarto e só o libera novamente depois que você avisar que não irá mais utilizá-lo.
Em termos mais técnicos, no sistema iOS utilizamos alguns métodos para controlar manualmente a memória, e assim, a vida de um objeto. Quando criamos um objeto no Xcode ele começa a ter um Reference Count, que nada mais é que um número de contagem.
Todo objeto precisa ter o count 1, no mínimo, para que o sistema mantenha a memória reservada para ele. Dessa forma usamos alguns métodos que nos possibilitam adicionar ou subtrair esse count do objeto que são: alloc, retain, release,copy, autorelease.
Quando vamos criar o objeto usamos o alloc, nesse momento o sistema entende que estamos pedindo para reservar um espaço de memória e já adiciona 1 ao count do objeto.
Se você quer que o sistema mantenha o objeto durante todo o programa você deve usar o retain para adicionar +1 no count dele, agora quando você ja usou o objeto precisa liberar a memória utilizamos o release para subtrair -1 do count.
Quando o count chega a ZERO o sistema entende que você não precisa mais daquele objeto, executa o dealloc e o elimina da memória. Os métodos copy e autorelease são abordados mais a fundo no curso de iOS Developer da Impacta.
E é assim a vida de um objeto criado por você no iOS. Porem, como temos muitas coisas para nos preocupar ao mesmo tempo; tantos ifs , elses e switchs, sempre esquecemos de gerenciar a memória. Com isso tínhamos um alto índice de problemas com vazamento.
E o iOS tem uma maneira muito positiva de tratar um app que deixa de funcionar por mais de 10 segundos: ele simplesmente o encerra. Você já deve ter vivenciado isso: está utilizando seu app, quando ele de repente encerra sozinho.
Isso acontece porque como o controle de memória era o MRC, ficava por nossa responsabilidade informar ao sistema para que ele liberasse a memória que não íamos mais utilizar e se não fizéssemos isso, o sistema continuava com a memória retida e isso consequentemente causava problemas no desempenho do app.
Mas, para nossa alegria, a Apple lançou no iOS 4.2 o ARC, uma incrível novidade para nós desenvolvedores. O ARC gerencia automaticamente o numero de count de cada objeto criado, e dessa forma, quando ele percebe que não vai mais utilizar um determinado objeto, libera a memória retida nele. O único trabalho que temos é de avisar ao sistema, ao iniciar um novo projeto, que o ARC será utilizado.
Dessa forma, todo gerenciamento de memória fica por conta do sistema.
No ARC temos que trabalhar com dois tipos de referências: Strong e Weak, que o sistema precisa para entender qual a importância que o objeto tem dentro do app de acordo com a referência que o programador definiu quando declarou o mesmo. Mas isso veremos mais a fundo no treinamento.
Espero ter ajudado e que com esse artigo você tenha entendido melhor como funciona o gerenciamento automático de memória. Não esqueça de deixar seu comentário nos contando se o conteúdo foi relevante para você ou caso tenha ficado alguma dúvida!
Deixe o seu comentário!