iOS - 内存从多个PDF构建PDF时出现问题

时间:2013-03-14 09:03:51

标签: ios cocoa-touch core-graphics

我正在尝试从iOS中的多个PDF文件创建单个PDF。在我的测试用例中,我有大约100个小PDF,每页3页。我从服务器下载它们并将它们放在一个文件中,然后保存在磁盘上。

这是我的代码:

NSString *filePath = /* file path to save PDFs to here */;
UIGraphicsBeginPDFContextToFile(filePath, CGRectZero, nil);
CGContextRef pdfContext = UIGraphicsGetCurrentContext();

for (int i = 0; i < self.numberOfSmallFiles; i++)
{
    @autoreleasepool
    {
        NSString *urlString = /* URL to PDF files on server */;

        NSURL *locationOfPDFOnServer = [[NSURL alloc] initWithString:urlString];
        NSData *pdfData = [[NSData alloc] initWithContentsOfURL:locationOfPDFOnServer];
        CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData((__bridge CFDataRef)pdfData);

        CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithProvider(dataProvider);
        size_t numberOfPages = CGPDFDocumentGetNumberOfPages(pdfDocument);

        for (size_t i = 1; i <= numberOfPages; i++)
        {
            @autoreleasepool
            {
                CGPDFPageRef pdfPage = CGPDFDocumentGetPage(pdfDocument, i);

                if (NULL == pdfPage)
                    continue;

                CGRect pdfCropBox = CGPDFPageGetBoxRect(pdfPage, kCGPDFMediaBox);

                CGContextBeginPage(context, &pdfCropBox);
                CGContextDrawPDFPage(context, pdfPage);
                CGContextEndPage(context);
            }
        }

        CGPDFDocumentRelease(pdfDocument);

        CGDataProviderRelease(dataProvider);
    }
}

UIGraphicsEndPDFContext();

此代码执行它应该执行的操作。但是,内存使用量是天文数字,而这在设备上不起作用。在设备上,它会因内存警告而崩溃。当我监视模拟器上的内存使用情况时,它的峰值大约为250 MB。

如何解决内存问题?

如果有人想知道为什么我这样做:我想给我的应用程序的用户选择下载杂志的PDF(超过100页)并阅读它们。我不想一个一个地下载它们,所以我可以显示第一页,而其余的仍在加载。

0 个答案:

没有答案