IOS 下UIGraphicsGetImageFromCurrentImageContext 拍照引发内存暴涨,导致应用被结束掉

1)CGImageRef的释放

You don't own theCGImageRefrawImageRefbecause you obtain it using[image CGImage]. So you don't need to release it.

However, you ownrawPixelDatabecause you obtained it usingCGDataProviderCopyDataand must release it.

CGDataProviderCopyData

Return Value: A new data object containing a copy of the provider’s data. You are responsible for releasing this object.

2)UIGraphicsGetImageFromCurrentImageContext

查了N多资料,寻找到了另一种替代方法,效果要好一些,但也没办法彻底解决这个问题

CGImageRef cgImage2 = CGBitmapContextCreateImage(ctx);

UIImage *fixed = [UIImage imageWithCGImage:cgImage2];

CGImageRelease(cgImage2);

3)最终解决办法:

因为是修改别人的代码,优化时无意中解决了此问题,原来的调用方法是在A函数中调用UIGraphicsGetImageFromCurrentImageContext(在C函数中)生成UIImage,然后传递给B函数去处理,这样内存会暴涨。现在将C函数调用生成UIImage放到B函数中生成并使用,这样就能得到及时释放。

4)额外的建议

因出问题应用模块是开启摄像头在不停检测每一帧图像并检测人脸,这样每秒会处理30次,导致临时的UIImage对象迅速增多,占用内存过大。在收到didReceiveMemoryWarning通知时,调用AVCaptureSession类的停止运行,然后再重新运行。

[self.captureSessionstopRunning];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1)),dispatch_get_main_queue(), ^{

[self.captureSessionstartRunning];

});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,391评论 30 472
  • 技术无极限,从菜鸟开始,从源码开始。 由于公司目前项目还是用OC写的项目,没有升级swift 所以暂时SDWebI...
    充满活力的早晨阅读 14,338评论 0 2
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 7,122评论 0 35
  • iOS面试小贴士 ———————————————回答好下面的足够了------------------------...
    不言不爱阅读 6,435评论 0 7
  • Lancy's Blog Blog Archives About MeTwitterWeiboGitHubRSS ...
    其实也没有阅读 10,865评论 0 24

友情链接更多精彩内容