gpt4 book ai didi

ios - 如何解决 CFData (store) 内存增加?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:02 24 4
gpt4 key购买 nike

我有以下代码来阅读PDF页面。
问题是每次我阅读仪器分析的页面时,CFData (store) 都会增加大约 1MB?任何帮助表示赞赏。

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context;

context = CGBitmapContextCreate(NULL,
width,
height,
8,
width* 4,
colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextClipToRect(context, CGRectMake(0, 0, pageSize.width*2, pageSize.height*2));

CGContextSaveGState(context);
CGPDFPageRef page = CGPDFDocumentGetPage(pdf, index + 1);
CGRect rect = CGPDFPageGetBoxRect(page, kCGPDFMediaBox);
CGRect rectClip = CGContextGetClipBoundingBox(context);
CGAffineTransform transform = aspectFit(rect,rectClip);
CGContextConcatCTM(context, transform);
CGContextSetInterpolationQuality(context, kCGInterpolationHigh);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);

CGImageRef image = CGBitmapContextCreateImage(context);
CGContextRelease(context);

UIImage *img = [UIImage imageWithCGImage:image];
CGImageRelease(image);

最佳答案

我遇到了同样的问题,在寻找答案时发现了您的问题。

在我的例子中,我将 pdf 页面转换为 jpeg,然后将它们保存到磁盘。我的问题似乎出在 CGPDFDocumentRef 和 CFURLRef 的所有权和发布上。

NSURL *pdfURL 上使用 _bridge cast 为我解决了这个问题。
我认为这个答案很好地解释了桥接 Actor :ARC and bridged cast

XCode 中的分析工具在这些类型的情况下非常有用。

- (void) drawRect:(CGRect)rect {
NSURL *pdfURL = [NSURL fileURLWithPath:self.filePath];

CGPDFDocumentRef document = CGPDFDocumentCreateWithURL((__bridge CFURLRef)pdfURL);

for (int i = 1; i <= (int)CGPDFDocumentGetNumberOfPages(document); ++i){
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBFillColor(context, 1.0,1.0,1.0,1.0);
CGContextClearRect(context, self.bounds);
CGContextFillRect(context, self.bounds);

CGPDFPageRef pageRef = CGPDFDocumentGetPage(document, i);

CGRect pageRect = CGPDFPageGetBoxRect(pageRef, kCGPDFMediaBox);

CGFloat scale = MIN(self.bounds.size.width / pageRect.size.width, self.bounds.size.height / pageRect.size.height);

CGContextSaveGState(context);
CGContextTranslateCTM(context, 0.0, self.bounds.size.height);
CGContextScaleCTM(context, 1.0, -1.0);
CGContextScaleCTM(context, scale, scale);

CGContextSetInterpolationQuality(context, kCGInterpolationLow);
CGContextSetRenderingIntent(context, kCGRenderingIntentDefault);
CGContextDrawPDFPage(context, pageRef);

CGContextRestoreGState(context);

CGImageRef image = CGBitmapContextCreateImage(context);

NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@_%i.jpg", self.sourceId, i]];
[UIImageJPEGRepresentation([UIImage imageWithCGImage:image], 1) writeToFile:jpgPath atomically:YES];

CGImageRelease(image);
}

CGPDFDocumentRelease(document);
}

希望这对某人有帮助!
凯文

关于ios - 如何解决 CFData (store) 内存增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14620539/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com