gpt4 book ai didi

objective-c - CG图像引用 |内存消耗|泄露

转载 作者:行者123 更新时间:2023-12-03 17:55:33 28 4
gpt4 key购买 nike

我需要捕获桌面图像并处理其 RGB 数据,我正在使用 Quartz API 来执行相同的操作,

我面临的问题是内存使用率高,

请引用函数,

在这里编辑,该函数是通过 pThread 调用的;像这样的东西,

void ImageProcessing::thread(){  
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];
ImgRef sImageRef

while( active){
**strong text**
if ([currentWnd getCurrentRGBImage:&currentImg]){
/* do something here */
}

}
[pool release];


}
-(bool)getCurrentRGBImage:(ImgRef *)pImgRef{

CGImageRef pCGImageRef;
pCGImageRef = [self getDesktopImage];

if ( !pCGImageRef ){
NSLog(@" got NULL Image ");

CGImageRelease(pCGImageRef);
pCGImageRef = NULL;

return NO;
}

// Create a bitmap rep from the image...

size_t width = CGImageGetWidth(pCGImageRef);
size_t height = CGImageGetHeight(pCGImageRef);
int bytesPerRow = CGImageGetBytesPerRow(pCGImageRef);
int bytesPerPixel = CGImageGetBitsPerPixel(pCGImageRef)/8;

CGDataProviderRef provider = CGImageGetDataProvider(pCGImageRef);

CFDataRef pData = CGDataProviderCopyData(provider);
const uint8_t* bytes = (const uint8_t *)CFDataGetBytePtr(pData);

/***** ------------- *********

Copy RAW Bytes to pImgRef

****************************/



CGDataProviderRelease(provider);
CFRelease(pData);

CGImageRelease(pCGImageRef);
pCGImageRef = NULL;

return YES;

}

而getDesktopImage函数是

-(CGImageRef)getDesktopImage{
CGImageRef screenShot;


screenShot = CGWindowListCreateImage(CGRectInfinite, kCGWindowListOptionOnScreenOnly, kCGNullWindowID, kCGWindowImageDefault);

return screenShot;
}

问题是,总的来说这个函数消耗了大量的内存,*pImgRef只有一个实例,只有像素,RGB操作,

内存使用情况我指的是Mac Activity Monitor,它可靠吗?

文档Documentation for CGDataProviderRelease提到应用程序需要维护它的保留和释放,所以我正在调用 CGDataProviderRelease 但在控制台中收到消息ma​​lloc 引用计数下溢导致 auto_refcount_underflow_error 中断以进行调试

我不应该调用 CGDataProviderRelease() 吗?如果我发表评论,我不会收到此消息,所以不确定它是否是 Quartz 中的错误或我的代码中的错误,

此外,这个函数消耗了大量内存,如果我检查事件监视器,可以安全地假设它确实使用了这么多内存吗?

最佳答案

由于您不保留、创建或复制数据提供程序,因此不应释放它。

我没有看到任何会导致内存消耗过多的内容,但您遗漏了一些代码。

关于objective-c - CG图像引用 |内存消耗|泄露,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14218272/

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