@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 МБ во время и после всех подготовительных работ.

Кто-нибудь может объяснить, что там происходит?

Ответы на вопрос(1)

Ваш ответ на вопрос