Сохранить право собственности на UIImage, созданный с помощью UIGraphicsGetImageFromCurrentImageContext - PullRequest
4 голосов
/ 16 декабря 2010

Я использую этот код для получения скриншотов окна в разное время и помещаю созданный UIImage в массив, который передается другому UIViewController, чтобы все они могли отображаться обратно в сетке. Я пытаюсь выпустить UIImage, и использование памяти никогда не уменьшается ... как я могу использовать изображение здесь один раз, и сохранить право собственности, чтобы я мог освободить память, как только она отобразится

UIGraphicsBeginImageContext(self.window.bounds.size);<br> [self.window.layer renderInContext:UIGraphicsGetCurrentContext()];<br> UIImage *image = UIGraphicsGetImageFromCurrentImageContext();<br> UIGraphicsEndImageContext();<br> [imagesArray addObject:image];<br> [image release];<br>

Ответы [ 3 ]

9 голосов
/ 26 февраля 2011

UIGraphicsGetImageFromCurrentImageContext() возвращает «объект изображения autoreleased , содержащий содержимое текущего контекста растрового изображения.»

Когда вы добавляете изображение в imagesArray, NSMutableArray сохраняет егоэто, и это все, что вам нужно.Память будет освобождена, когда изображение будет удалено из массива.

Вы не должны вызывать освобождение изображения.

2 голосов
/ 29 ноября 2012

У меня произошел сбой памяти при UIGraphicsGetImageFromCurrentImageContext () ... если вы создаете и выпускаете много из них, вы должны обернуть их в новый AutoReleasePool для каждой итерации. Даже то, что NSRunLoop пометил галочкой, БЫЛО НЕДОСТАТОЧНО для Apple / iOS, чтобы выполнять уборку мусора, лежащего вокруг этого.

, например

for( ... )
{
   @autoreleasepool
   {
      UIImage* blah = UIGraphicsGetImageFromCurrentImageContext();
   }
}
0 голосов
/ 08 июня 2012

Я получаю странную утечку памяти UIImage, используя сохраненное изображение UIImage из UIGraphicsGetImageFromCurrentImageContext () в фоновом потоке.Проблема оказалась в том, что вы должны вызывать эту функцию только из основного потока вашего приложения.Осторожно.

...