Frage

Betrachten Sie diesen Pseudo-Code:

// an image is initialized
UIImage *imagePX = [[UIImage alloc]initWithContentsOfFile:... bla bla

imagePX = [self rotateImage:imagePX]; //A
[self doStuff:imagePX]; //B

Dann habe ich die RotateImage Methode:

- (UIImage*) rotateImage:(UIImage*)source {
  ... rotate the image... draw on context...
  [source drawInRect... bla bla
  ...

  UIImage *rotatedImage =  UIGraphicsGetImageFromCurrentImageContext();

  return rotatedImage;
}

Meine Frage ist: imagePX wurde nie veröffentlicht. Da das Bild der Methode RotateImage übergeben wird, dachte ich, ich einfach loslassen konnte, nachdem es auf dem Befehl [Quelle drawInRect ...] verwenden, da ich ein rotatedImage auf der Methode zurückkommen würde, aber wenn ich das tue, das Programm abstürzt, weil die Variable imagePX existieren sollte, so die Linie A auswerten kann.

Mein anderes Problem ist, dass das Bild an einem anderen Routine auf B weitergeleitet. Also, was ist der beste Weg, es ohne Spur von imagePX zu verlieren machen zu arbeiten und undicht?

Was ist der beste Ansatz?

War es hilfreich?

Lösung

Anstelle von

[[UIImage alloc]initWithContentsOfFile:... bla bla

Mit

[UIImage imageWithContentsOfFile:...bla bla

Diese wird Autoreleased werden.

Andere Tipps

Es besteht keine Notwendigkeit, eine Instanz von UIImage zuzuordnen. imageWithContentsOfFile ist eine statische Methode, und kann auf die Klasse selbst aufgerufen werden.

Da imageWithContentsOfFile beinhaltet nicht die Begriffe alloc, new oder copy das zurückgegebene Objekt (vereinbarungsgemäß) nicht beibehalten wird, und wird an dem ersten Drain-Anschluss des Autofreigabepools Autoreleased werden.

Im Gegensatz dazu, wenn Sie jemals in eine ähnliche Situation führen, wo man nicht herausfinden kann, warum Sie EXC_BAD_ACCESS Fehler erhalten, wenn Sie dieses Objekt zuzugreifen versuchen, ist es wahrscheinlich zu früh freigegeben. In diesen Fällen werden Sie ein Handbuch tun behalten / Release im Rahmen dieser Klasse.

Was [UIImage imagenamed: @ ""]? Kein alloc, keine Notwendigkeit zur Freigabe)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top