@Hariprasad У меня немного с тобой такая же проблема. И я не могу найти никаких решений там. Некоторые говорят, что это ошибка фреймворка, другие выпускают, но я думаю, что мой выпустил все. У меня нет утечек или чего-то еще, и все равно в какой-то момент произойдет сбой. Вы нашли решение для этого?
итателя PDF я хочу подготовить документ, сделав «скриншоты» каждой страницы и сохранив их на диск. Первый подход
CGPDFDocumentRef document = CGPDFDocumentCreateWithURL((CFURLRef) someURL);
for (int i = 1; i<=pageCount; i++)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
CGPDFPageRef page = CGPDFDocumentGetPage(document, i);
...//getting + manipulating graphics context etc.
...
CGContextDrawPDFPage(context, page);
...
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
...//saving the image to disc
[pool drain];
}
CGPDFDocumentRelease(document);
Это приводит к большому количеству памяти, которая, кажется, не освобождается после первого запуска цикла (подготовка 1-го документа), но больше не освобождает память при дополнительных запусках:
MEMORY BEFORE: 6 MB
MEMORY DURING 1ST DOC: 40 MB
MEMORY AFTER 1ST DOC: 25 MB
MEMORY DURING 2ND DOC: 40 MB
MEMORY AFTER 2ND DOC: 25 MB
....
Изменение кода на
for (int i = 1; i<=pageCount; i++)
{
CGPDFDocumentRef document = CGPDFDocumentCreateWithURL((CFURLRef) someURL);
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
CGPDFPageRef page = CGPDFDocumentGetPage(document, i);
...//getting + manipulating graphics context etc.
...
CGContextDrawPDFPage(context, page);
...
UIImage *resultingImage = UIGraphicsGetImageFromCurrentImageContext();
...//saving the image to disc
CGPDFDocumentRelease(document);
[pool drain];
}
изменяет использование памяти на
MEMORY BEFORE: 6 MB
MEMORY DURING 1ST DOC: 9 MB
MEMORY AFTER 1ST DOC: 7 MB
MEMORY DURING 2ND DOC: 9 MB
MEMORY AFTER 2ND DOC: 7 MB
....
но это явно шаг назад в производительности.
Когда я начинаю читать PDF (позже, другой поток), в первом случае больше не выделяется память (остается на уровне 25 МБ), тогда как во втором случае объем памяти увеличивается до 20 МБ (с 7).
В обоих случаях, когда я удаляюCGContextDrawPDFPage(context, page);
Память строк (почти) постоянна и составляет 6 МБ во время и после всех подготовительных работ.
Кто-нибудь может объяснить, что там происходит?