Pregunta

Considere este pseudocódigo:

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

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

Entonces tengo el método rotateImage:

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

  UIImage *rotatedImage =  UIGraphicsGetImageFromCurrentImageContext();

  return rotatedImage;
}

Mi pregunta es: imagePX nunca se lanzó. A medida que la imagen se pasa al método RotateImage, pensé que podría simplemente liberarla, después de usarla en el comando [source drawInRect ...], ya que devolvería una imagen rotada en el método, pero si lo hago, el programa se bloqueará, porque la variable imagePX debería existir para que la línea A pueda evaluar.

Mi otro problema es que la imagen se reenviará en B a otra rutina. Entonces, ¿cuál es la mejor manera de hacerlo funcionar sin perder el rastro de imagePX y las fugas?

¿Cuál es el mejor enfoque?

¿Fue útil?

Solución

En lugar de

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

Uso

[UIImage imageWithContentsOfFile:...bla bla

Este último se lanzará automáticamente.

Otros consejos

No hay necesidad de asignar una instancia de UIImage. imageWithContentsOfFile es un método estático y se puede invocar en la clase misma.

Dado que imageWithContentsOfFile no incluye los términos alloc , new o copy el objeto devuelto (por convención ) no se retiene, y se emitirá automáticamente en el primer drenaje del grupo de liberación automática.

Por el contrario, si alguna vez se encuentra con una situación similar en la que no puede entender por qué está recibiendo errores EXC_BAD_ACCESS al intentar acceder a este objeto, es probable que se haya lanzado demasiado pronto. En esos casos, querrá hacer una retención / liberación manual dentro del alcance de esta clase.

¿Qué pasa con [UIImage imageNamed: @ " "]? Sin asignación, sin necesidad de liberar)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top