Question

Considérons ce pseudo-code:

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

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

Ensuite, j'ai la méthode rotateImage:

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

  UIImage *rotatedImage =  UIGraphicsGetImageFromCurrentImageContext();

  return rotatedImage;
}

Ma question est la suivante: imagePX n'a ??jamais été publié. Lorsque l’image est transmise à la méthode RotateImage, j’ai pensé que je pouvais simplement la relâcher, après l’avoir utilisée sur la commande [source drawInRect ...], car je renverrais une image rotatedImage sur la méthode, mais si je le fais, le programme va planter, car la variable imagePX doit exister pour que la ligne A puisse être évaluée.

Mon autre problème est que l'image sera transmise sur B à une autre routine. Alors, quel est le meilleur moyen de le faire fonctionner sans perdre la trace de imagePX et les fuites?

Quelle est la meilleure approche?

Était-ce utile?

La solution

Au lieu de

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

Utiliser

[UIImage imageWithContentsOfFile:...bla bla

Ce dernier sera automatiquement libéré. ??

Autres conseils

Il n'est pas nécessaire d'allouer une instance de UIImage. imageWithContentsOfFile est une méthode statique et peut être appelée sur la classe elle-même.

Puisque imageWithContentsOfFile n'inclut pas les termes alloc , nouveau ou copie de l'objet renvoyé (par convention ) n'est pas retenu et sera libéré automatiquement au premier drain du groupe de libération automatique.

Inversement, si vous rencontrez un jour une situation similaire dans laquelle vous ne pouvez pas comprendre pourquoi vous recevez des erreurs EXC_BAD_ACCESS lorsque vous essayez d'accéder à cet objet, celui-ci a probablement été publié trop tôt. Dans ces cas, vous souhaiterez effectuer une conservation / libération manuelle dans le cadre de cette classe.

Qu'en est-il de [UIImage imageNamed: @ ""]]? Pas d'allocation, pas besoin de libérer)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top