UIGraphicsGetImageFromCurrentImageContext утечка - PullRequest
4 голосов
/ 25 августа 2011

Я написал следующий фрагмент кода, чтобы сделать снимок экрана:

UIGraphicsBeginImageContext(animationView.frame.size);
[[window layer] renderInContext:UIGraphicsGetCurrentContext()];
UIImage* screenshot = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();

Но, UIGraphicsGetImageFromCurrentImageContext, похоже, просачивается.Это правильно?

В приборах я не смог получить точную точку утечки.В мониторе активности я заметил, что когда я переключаюсь на пользовательский интерфейс, который выполняет приведенный выше фрагмент кода, увеличивается на несколько МБ.После этой точки оно никогда не уменьшается.UIGraphicsGetImageFromCurrentImageContext имеет утечку памяти?Как мне решить эту проблему?

Редактировать

Анализ инструментов Монитор активности: показывает скачок памяти при выполнении этой строки кода;никогда не уменьшается даже после освобождения снимка экрана (UIImage)

Утечки и распределение, Снимок кучи: не показывает утечки ИЛИ это распределение.

Ответы [ 2 ]

0 голосов
/ 24 марта 2016

CGContextRef context = UIGraphicsGetCurrentContext ();

/ * ваш код * /

CGContextRelease (контекст);

очистить контекст, когда закончите

0 голосов
/ 25 августа 2011

Вы только что создали UIImage с данными для вашего animationView (которое может составлять несколько МБ). Возможно, вам следует обернуть эту функцию в пул авто-релизов.

 NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];     
    UIImage* screenshot = UIGraphicsGetImageFromCurrentImageContext();
    //[screenshot retain]; //If you want precise control over when it is released and you will use it later.
    [pool release];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...