Core Graphics 栅格数据未从内存中释放

Posted

技术标签:

【中文标题】Core Graphics 栅格数据未从内存中释放【英文标题】:Core Graphics raster data not releasing from memory 【发布时间】:2013-11-14 03:28:09 【问题描述】:

所以我让我的应用截屏并使用以下代码将其保存到相册中...

- (void) save 
        UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0 );
        [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
        UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        UIImageWriteToSavedPhotosAlbum(theImage,nil,NULL,NULL);
        NSData*theImageData=UIImageJPEGRepresentation(theImage, 1.0 );
        [theImageData writeToFile:@"image.jpeg" atomically:YES];
    

如何释放 Core Graphics 分配的用于保存屏幕截图栅格数据的内存?

我的项目使用 ARC 进行内存管理。在测试应用程序如何分配内存时,我注意到截屏后内存没有释放,导致应用程序随着时间的推移变得缓慢。 Instruments 中的“分配摘要”告诉我数据类别是“CG 栅格数据”,负责的调用者是“CGDataProviderCreatWithCopyOfData”。

CFRelease() 中有没有解决方案; ?

我的第一个应用程序,所以我很菜鸟,我浏览了互联网试图解决这个问题,但没有运气......

【问题讨论】:

【参考方案1】:

您可以尝试将方法的内容包装到 @autorelease 块中。

@autoreleasepool 
...

【讨论】:

你的意思是@autoreleasepool? 确实,很抱歉。 它对我有用。无需投票。也许你没有自动释放正确的块。 你有很多我也赞成的答案,但这不是其中之一。

以上是关于Core Graphics 栅格数据未从内存中释放的主要内容,如果未能解决你的问题,请参考以下文章

Asp.Net core api 中没有释放内存

在 GC 环境中,Core Data 啥时候会释放其分配的内存?

再谈EF Core内存数据库单元测试问题

如何在 Core Graphics 中绘制任何 PNG 格式

Linux系统版本CPU内存查看硬盘空间

Linux系统版本CPU内存查看硬盘空间