API de quartzo PDF causando falhas de memória

Estou tendo problemas de travamento usando a API de quartzo PDF para iOS. No momento, estou compilando com o SDK 4.0 GM Seed e executando no meu iPad 3.2 (tentei usar o SDK 3.2 com resultados idênticos).

Todo o código que eu estou usando é baseado na documentação padrão do Apple Quartz e em várias fontes nos internets. Portanto, não consigo imaginar que estou fazendo algo drasticamente diferente ou errado.

O código funciona perfeitamente no Simulador (todas as versões, é um aplicativo Universal) e até mesmo enquanto se usa a função "Simular aviso de memória". Eu usei a ferramenta Vazamentos e não há vazamentos encontrados. Construir e analisar também não encontra nada. Nenhuma falha ou registro de pouca memória é deixado na minha biblioteca.

Tudo isso me leva a acreditar que o dispositivo está ficando sem memória. Isso acontece depois de percorrer, digamos, 50 páginas em PDF, com cerca de 35% tendo uma imagem de algum tipo (alguma página inteira, algum ícone). Não falha em nenhuma página em particular. O pdf que estou carregando tem cerca de 75 páginas e 3,5 MB.

Examinei problemas semelhantes neste site e em torno das internets e apliquei alguns conselhos no código abaixo. Agora libero a referência do documento pdf em cada virada da página e não retiro / libero mais uma referência da página. Também simplifiquei a troca de imagens do CGImages para o uso da função UIGraphicsGetImageFromCurrentImageContext. Eu tentei várias implementações para alternar as imagens, incluindo a substituição completa do pdfImgView por uma instância temporária recém-alocada (usando[[UIImageView alloc] iniWithImage:UIGraphicsGetImageFromCurrentImageContext()]), usando o configurador para pdfImgView e liberando a temperatura. Todas as variações passam nos testes Leaks and Analyzer, mas ainda exibem o mesmo comportamento de travamento.

Portanto, antes de me afastar completamente dos PDFs, há algo que devo tentar ou algo que está faltando?

Visualize o código do controlador chamado nos manipuladores de interface para trocar de página e no primeiro carregamento:

[self drawPage];

// ...animation code...simple CATransition animation...crashes with or without

// scrollView is a UIScrollView that is a subview of self.view
[scrollView.layer addAnimation:transition forKey:nil];
// pdfImgView is a UIImageView that is a subview of scrollView
pdfImgView.image = UIGraphicsGetImageFromCurrentImageContext();

método drawPage usado para configurar e desenhar a página PDF para o contexto:

[CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("BME_interior.pdf"), NULL, NULL);
pdfRef = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL); // instance variable, not a property
CFRelease(pdfURL);
CGPDFPageRef page = CGPDFDocumentGetPage(pdfRef, currentPage);

CGRect box = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
// ...setting scale and imageHeight, both floats...

if (UIGraphicsBeginImageContextWithOptions != NULL) {
    UIGraphicsBeginImageContextWithOptions(CGSizeMake(self.view.frame.size.width, imageHeight), NO, 0.0);
} else {
    UIGraphicsBeginImageContext(CGSizeMake(self.view.frame.size.width, imageHeight));
}
CGContextRef context = UIGraphicsGetCurrentContext();
NSLog(@"page is %d, context is %d, pdf doc is %d, pdf page is %d", currentPage, context, pdfRef, page); // all prints properly

// ...setting up scrollView for new page, using same instance...

CGContextTranslateCTM(context, (self.view.frame.size.width-(box.size.width*scale))/2.0f, imageHeight);
CGContextScaleCTM(context, scale, -1.0*scale);

CGContextSaveGState(context);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);

CGPDFDocumentRelease(pdfRef);
pdfRef = NULL;