Todavía estoy aprendiendo a través del desarrollo de iOS y trabajando con Core Data, y acabo de encontrar ciclos de retención.Datos principales: evitando retener ciclos en muchas relaciones
Según mis conocimientos, al leer la Guía de programación de datos básicos, una vez que haya terminado de trabajar con una relación, utilice el método refreshObject:mergeChanges
del contexto del objeto administrado para asegurarse de que el ciclo de retención esté interrumpido.
Digamos que tengo una relación demasiado grande entre un Departamento y sus Empleados, y en mi código accedo a la relación de empleados del departamento, ¿eso significa que ahora tendré que recorrer cada objeto del empleado y llamar al refreshObject:mergeChanges
¿método? En el código que esto sería
for (Employee *anEmployee in department.employees) {
//some code that accesses an employee's properties
[context refreshObject:enEmployee mergeChanges:NO];
}
Parece que si yo no hago eso, cada objeto empleado accedo ahora contendrá una referencia al departamento y que va a terminar con los ciclos de retener.
¿Es correcto mi comprensión aquí? ¿Es este un enfoque estándar cuando se trata de muchas relaciones en Core Data? Gracias.
Esto significa que cada vez que trabajo con los objetos de la relación, ¿tendré que llamar a ese método sobre el objeto? –
No es obligatorio hacerlo, aunque es muy recomendable en el caso de que tenga una tienda considerablemente grande, y acceda frecuentemente a 'NSManagedObjects', y no tenga la necesidad de guardarlos en la memoria (puede dejar que se conviertan en fallas)) Imagine CoreData como un "sistema de recolección de basura", en un entorno recolectado de basura solo dispone de memoria si le preocupa el uso de la memoria. El 'refreshObject: mergeChanges' liberaría el objeto en su lugar para dejarlo al sistema del recolector de basura. Este material del recolector de basura es solo una analogía para que comprendas el proceso. – vfn