Como funciona o contador de referência automática no iOS? Na verdade, esse tópico ficou mais fácil de entender depois que me familiarizei com o Contador de referência manual. Este é um artigo muito simples para ajudá-lo a obter uma compreensão básica de como funciona o gerenciamento de memória no iOS.
Existem várias ferramentas para gerenciamento de memória no iOS:
MRC - Contador de Referência Manual
MRC é o gerenciamento de link manual por meio de código. Nos primeiros dias e nos tempos pré-históricos, os próprios desenvolvedores gerenciavam a contagem de referência por meio de equipes. Foi, para dizer o mínimo, difícil:
alocar - criando um objeto (criando um link)
reter - referindo-se a ele (+1 no link)
lançamento - diminui a contagem de referência (-1)
desalocar - se a contagem de referência for 0 = descarregar da memória
Basicamente, você aloca um objeto, salva-o em algum ponto e, a seguir, envia uma liberação para cada alocação / salvamento enviado. O método dealloc é chamado em um objeto quando ele é removido da memória.
Problemas:
Você precisa contar constantemente, reter, liberar
travar ao acessar da memória descarregada
esqueci de colocar o lançamento - vazamento de memória
ARC - Contador de referência automática
, , , - iOS . . ARC . . , ARC , .
?
(release/retain - ) dealloc -
properties change - weak/strong
property :
strong - retain
weak - assign.
, ARC:
O ciclo de retenção ocorre quando a quantidade de espaço alocado na memória não pode ser recuperada devido a ciclos de salvamento. Como o Swift usa contagem automática de referência (ARC), um loop de salvamento ocorre quando dois ou mais objetos contêm referências fortes entre si. Como resultado, esses objetos se mantêm na memória, porque seu contador de salvamento nunca diminuirá para 0, o que impedirá que a função deinit seja chamada e libere a memória.
A solução é trivial - tornar um dos elos fraco.
Este artigo é mais básico e introdutório aos fundamentos do gerenciamento de memória no iOS, para um fácil entendimento conceitual.