Вопрос

Рассмотрим этот псевдокод:

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

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

Затем у меня есть метод RotateImage:

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

  UIImage *rotatedImage =  UIGraphicsGetImageFromCurrentImageContext();

  return rotatedImage;
}

Мой вопрос:imagePX так и не был выпущен.Поскольку изображение передается методу RotateImage, я подумал, что могу просто освободить его после использования в команде [source drawInRect...], так как я бы вернул повернутое изображение в методе, но если я это сделаю, программа произойдет сбой, поскольку переменная imagePX должна существовать, чтобы строка A могла выполнить оценку.

Другая моя проблема заключается в том, что изображение будет перенаправлено на B в другую процедуру.Итак, как лучше всего заставить его работать, не теряя imagePX и не допуская утечек?

Какой подход лучше всего?

Это было полезно?

Решение

Вместо

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

Использовать

[UIImage imageWithContentsOfFile:...bla bla

Последний будет выпущен автоматически.

Другие советы

Нет необходимости выделять экземпляр UIImage. imageWithContentsOfFile является статическим методом и может вызываться для самого класса.

Поскольку imageWithContentsOfFile не включает в себя термины alloc , new или copy возвращаемого объекта (по соглашению ) не сохраняется и будет автоматически освобожден при первом сливе пула автоматического выпуска.

И наоборот, если вы когда-либо сталкивались с подобной ситуацией, когда вы не можете понять, почему вы получаете ошибки EXC_BAD_ACCESS при попытке доступа к этому объекту, скорее всего, он был выпущен слишком рано. В этих случаях вы захотите выполнить сохранение / разблокировку вручную в рамках этого класса.

Как насчет [UIImage imageNamed: @ " "]? Нет, не нужно освобождать)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top