驴C贸mo funciona el contador autom谩tico de referencias en iOS? De hecho, este tema me result贸 m谩s f谩cil de entender despu茅s de familiarizarme con el contador de referencia manual. Este es un art铆culo muy simple que lo ayudar谩 a obtener una comprensi贸n b谩sica de c贸mo funciona la administraci贸n de memoria en iOS.
Hay varias herramientas para la gesti贸n de la memoria en iOS:
MRC - Contador de referencia manual
MRC es la gesti贸n manual de enlaces mediante c贸digo. En los primeros d铆as y en la prehistoria, los propios desarrolladores gestionaban el recuento de referencias a trav茅s de equipos. Fue, por decirlo suavemente, dif铆cil:
alloc: crear un objeto (crear un enlace)
retener - referencia a 茅l (+1 al enlace)
liberaci贸n: disminuye el recuento de referencias (-1)
dealloc - si el recuento de referencias es 0 = descargar de la memoria
B谩sicamente, asigna un objeto, lo guarda en alg煤n momento y luego env铆a una versi贸n para cada asignaci贸n / guardado que env铆a. El m茅todo dealloc se llama en un objeto cuando se elimina de la memoria.
Problemas:
Necesita contar constantemente retener, liberar
falla al acceder desde la memoria descargada
olvid茅 poner el comunicado - fuga de memoria
ARC - Contador de referencia autom谩tico
, , , - iOS . . ARC . . , ARC , .
?
(release/retain - ) dealloc -
properties change - weak/strong
property :
strong - retain
weak - assign.
, ARC:
El ciclo de retenci贸n es cuando la cantidad de espacio asignado en la memoria no se puede recuperar debido a los ciclos de ahorro. Debido a que Swift usa el conteo autom谩tico de referencias (ARC), se produce un bucle de guardado cuando dos o m谩s objetos contienen fuertes referencias entre s铆. Como resultado, estos objetos se mantienen unos a otros en la memoria, porque su recuento de guardado nunca disminuir谩 a 0, lo que evitar谩 que se llame a la funci贸n deinit y se libere memoria.
La soluci贸n es trivial: debilitar uno de los enlaces.
Este art铆culo es m谩s b谩sico e introductorio a los conceptos b谩sicos de la administraci贸n de memoria en iOS, para una f谩cil comprensi贸n conceptual.