2009-11-21 3 views
4

Я разрабатываю приложение для iPhone с использованием окна coverFlow, когда приложение создает карты, используя UIView, чтобы добавить ярлыки и другие материалы. Затем я конвертировать UIView в UIImage, используя следующий код:Преобразование UIview в UIimage, вызывающий утечку памяти

UIGraphicsBeginImageContext(imageView.bounds.size); 
[imageView.layer renderInContext:UIGraphicsGetCurrentContext()]; 
UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext(); 
UIGraphicsEndImageContext(); 

// returning the UIImage 
return viewImage; 

Каждый раз я перерисовывать CoverFlow у меня есть огромный прирост распределения памяти, которая никогда не уменьшается, даже если я dealloc мой взгляд Coverflow.

Я думаю, что утечка памяти в коде, который я добавил, что вы думаете?

+2

Я испытал тот же вопрос, и открыл радар с Apple. Он был закрыт как дубликат, поэтому вы не одиноки. –

+0

Вы могли решить это? У меня такая же проблема. –

+0

Я также сталкиваюсь с той же проблемой. Помогите мне. Как мы можем это решить? – arundevma

ответ

2

В приведенном фрагменте кода отсутствует утечка памяти. Эта операция не может быть выполнена на фоновом потоке из-за UIGraphicsBeginImageContext(), поэтому вы должны иметь NSAutoreleasePool (возвращаемое значение UIGraphicsGetImageFromCurrentContext() автореализовано). Без дополнительной информации невозможно определить, где может произойти утечка памяти. Предлагаю вам посмотреть, какие объекты в конечном итоге принадлежат объекту viewImage, и убедитесь, что вы правильно освобождаете UIImage, если вы его сохраняете.

0

Использовать drawViewHierarchyInRect:afterScreenUpdates: вместо renderInContext: is 15 раз быстрее.

Performance comparison

Вы можете увидеть сравнение на this article.

Кроме того, я создал Swift расширение для этого: https://stackoverflow.com/a/32042439/517707

Смежные вопросы