Meine App lädt Bilder von einer URL in einer bestimmten Reihenfolge herunter und der Benutzer sieht sie. Ich lasse die App das nächste Bild vorladen und die älteren Bilder in einem Cache behalten.Speicher wird nicht korrekt freigegeben?
Dieser Cache ist im Grunde ein NSMutableDictionary mit Schlüsseln, die der Image-ID zugeordnet sind. Jedes Objekt im Cache ist auch ein NSDictionary mit der URL, der Image-URL, einem Titel und einem NSData-Objekt. Wenn ich das Bild herunterlade, füge ich ein neues Wörterbuchobjekt mit diesen Elementen in den Cache ein. Ich speichere das NSData-Objekt wie folgt: NSData * imgData = [[NSData-Alloc] initWithContentsOfURL: [NSURL URLWithString: Bildurl]]; Ich füge dieses Objekt dann dem Child-Dictionary-Objekt hinzu.
Dies nimmt offensichtlich eine große Menge an RAM nach einer großen Anzahl von Fotos gespeichert und zwischengespeichert, so dass ich die Speicherwarnung durch Löschen des gesamten Caches reagieren. Das Problem ist, egal was ich versucht habe, ist kein RAM freigegeben. Die Objekte verschwinden (wie sie sollten), geben aber kein RAM zurück. Ich habe versucht, Folgendes zu tun:
Das Problem ist, NICHTS, das ich versucht habe, hat RAM befreit. Gibt es etwas, was ich falsch mache, wenn ich den Speicher der NSData-Objekte freigebe?
Welche Cache-Richtlinie verwenden Sie beim Herunterladen der Daten? Haben Sie bestätigt (d. H. Mit Leaks oder Zuordnungen), dass die Erinnerung definitiv durchgesickert oder aufgegeben wird? –
Ich verwende kein Caching, das in das iOS SDK integriert ist. Ich verwalte mein eigenes mit einem NSDictionary, das mit NSData-Objekten gefüllt ist (die die Bilder enthalten). Wenn ich alle Objekte aus dem Wörterbuch lösche, wird kein Speicher freigegeben. Ich bin mir nicht sicher, wo genau dieser Speicher noch zugewiesen wird, aber es wird nicht freigelassen, wie ich es möchte. –