Ich habe eine UIImage, die ich mit imageWithData instanziiere: (Die Daten werden mit [NSData dataWithContentsOfFile:] aus dem Bundle geladen).Speicherverwaltung beim Zeichnen auf eine Ansicht auf dem iPhone
bin Zeichnung ich dann das Bild wie folgt:
NSData *imageData = [NSData dataWithContentsOfFile:fileLocation];
UIImage *myImage = [UIImage imageWithData:imageData];
//These lines are superfluous from what I can tell, replacing with
//UIImage *myImage = [UIImage imagedNamed:imageName]; very soon.
[myImage drawAtPoint:CGPointMake(0,0)];
//myImage will be released at the end of the run loop
Meine Frage lautet: Die UIImage erstellt Autoreleased. Was passiert in Bezug auf Speicher, wenn die UIImage auf die Ansicht gezeichnet wird und dann die UIImage nicht mehr existiert. Offensichtlich ist das Bild visuell immer noch da, wie es in einen Kontext gezeichnet wurde.
Wird die Speicherbelegung verdoppelt, wenn die UIImage gültig ist UND in die Ansicht gezogen wurde, und dann zur gleichen Menge zurückkehren, als ob nur ein UIImage existierte, nachdem die UIImage freigegeben wurde?
Jetzt gehen Sie eine andere Route. Wenn ich [UIImage imageNamed:] verwendet habe, um das Bild zu instantiieren, dann hat die UIImage-Klasse ihren eigenen Bild-Cache und enthält immer nur eine echte Instanz eines bestimmten Bildes (unabhängig davon, wie viele UIImage-Instanzen erstellt werden) repräsentieren dieses eine Bild).
Meine andere Frage ist: Was passiert mit dem Bild im Cache, wenn ich es in einen Kontext zeichnen und dann das UIimage freigegeben wird (über Autorelease am Ende der Laufschleife)? Bleibt das Bild im Cache und verbraucht es Speicher? Wird es entfernt, weil keine anderen UIImage-Instanzen es verwenden?
Jede Hilfe wäre großartig, danke!
Könnten Sie bitte einen gründlicheren Code zur Verfügung stellen? –
Es gibt nicht viel mehr Code zur Verfügung, wenn ich ehrlich bin. Ich füge hinzu, was nicht da ist. – Jasarien