我正在尝试从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页)并阅读它们。我不想一个一个地下载它们,所以我可以显示第一页,而其余的仍在加载。