Ich habe dieses Problem. Ich habe eine Datenbank von Bildern in Core Data. Ich hole alle Bilder (ca. 80 MB) und gebe ein NSMutableArray ein. Die Objekte richtig bemängelt werden:Core Data Speicherverbrauch und Speicher Warnung
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]);
}
das Protokoll lesen, ich sehe, dass die Objekte sind alle richtig jedoch bemängelt, Instruments, ich sehe, dass 80 MB Speicher verwendet werden. Ich denke, das ist der Grund, warum Core Data seine Ergebnisse zwischenspeichert und den Speicher freigeben sollte, wenn er benötigt wird. Aber (und das ist mein "Problem"), wenn ich eine Speicherwarnung simuliere, passiert nichts! Die 80MB bleiben dort.
bei Instrumenten der Suche - Zuweisungen werden die 80MB von vielen Malloc verwendet: (Beispiel)
Graph Kategorie Live-Bytes # Leben # Transitory Insgesamt Bytes # Insgesamt # Verrechnungen (Netto/Overall) 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 19 10,17 MB 62% 0,00, 0,00%
Dies ist ein Link zu einem Bild des gesamten Aufrufbaum: https://www.dropbox.com/s/du1b5a5wooif4w7/Call%20Tree.png
Irgendwelche Ideen? Danke
Vielleicht gibt Core Data Speicher auf 'Memory Warning Level 2' frei? Ist es möglich, mit Ihrem Szenario einen geringen Speicherausfall zu verursachen? – brigadir
Gibt es eine "magische Methode", um eine Speicherwarnstufe 2 zu simulieren? Oder "einfach" muss ich Speicher verbrauchen? – LombaX
Ich kenne keine Simulationsmethode. Sie sollten eine weitere "schwere" App (z. B. Appstore) ausführen und Ihre App im Hintergrund behalten sowie das Protokoll der Protokollkonsole und das Speicherdiagramm der Geräte verfolgen. Die 'level 2' Warnung wird in der Konsole erwähnt - also sollten Sie sich die Speichergrafik in diesem Moment ansehen. – brigadir