Tengo este problema. Tengo una base de datos de imágenes en Core Data. Cojo todas las imágenes (aproximadamente 80 MB) y las coloco en un NSMutableArray. Los objetos están correctamente criticada:Uso de memoria de datos centrales y advertencia de memoria
NSArray *fetchResults = [self.managedObjectContext executeFetchRequest:request error:&error];
self.cache = [NSMutableArray arrayWithArray:fetchResults];
for (ImageCache *imageObject in self.cache) {
NSLog(@"Is fault? %i", [imageObject isFault]);
}
lectura del registro, veo que los objetos están correctamente criticada Sin embargo, el uso de instrumentos, veo que se usan 80 MB de memoria. Creo que esta es la razón por la que Core Data almacena en caché sus resultados, y debería liberar la memoria cuando sea necesaria. Pero (y este es mi "problema"), si simulo una advertencia de memoria, ¡no pasa nada! Los 80MB permanecen allí.
En cuanto a los instrumentos - asignaciones, el 80 MB se utilizan por muchos Malloc: (ejemplo)
Gráfico Categoría vivo Bytes # # Vida Transitorias general Bytes # # En general Asignaciones (neto/total) 0 Malloc 176,00 KB 8,59 MB 50 57 18,39 MB 107% 0.00,% 0.00 0 Malloc 200,00 KB 8,20 MB 42 460 98,05 MB 502% 0.00,% 0.04 0 Malloc 168,00 KB 7,05 MB 43 MB 19 10,17 62%: 0,00, 0,00%
Este es un enlace a una imagen de todo el árbol de llamadas: https://www.dropbox.com/s/du1b5a5wooif4w7/Call%20Tree.png
¿Alguna idea? Gracias
¿Quizás Core Data libera memoria en 'Memory Warning Level 2'? ¿Es posible producir una falla de memoria baja con su escenario? – brigadir
¿Hay algún "método mágico" para simular un nivel de advertencia de memoria 2? O "simplemente" tengo que consumir memoria? – LombaX
No conozco ningún método de simulación. Debería ejecutar otra aplicación "pesada" (Appstore por ejemplo), mantener su aplicación en segundo plano y seguir el registro de la consola y la tabla de memoria de Instrumentos. La advertencia de "nivel 2" se mencionará en la consola, por lo que debe mirar la tabla de memoria en ese momento. – brigadir