UIImage内存释放的问题

同样一段代码Swift没有内存问题, 而OC有内存释放的问题. 折腾了一下午才发现OC需要调用CGImageRelease去释放CGImage对象, 真是坑!

Objective-C
- (UIImage *) imageFromSampleBuffer: (CMSampleBufferRef) sampleBuffer {
    CVImageBufferRef buffer = CMSampleBufferGetImageBuffer(sampleBuffer);
    CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:buffer];
    CGImageRef cgImage = [[[CIContext alloc] init] createCGImage:ciImage fromRect:ciImage.extent];
    UIImage *image = [[UIImage alloc] initWithCGImage:cgImage];
    CGImageRelease(cgImage); //没有此句话无法释放内存
    return image;
}

Swift

 private func imageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
        guard let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return nil }
        let ciImage = CIImage(cvPixelBuffer: imageBuffer)
        guard let cgImage = CIContext().createCGImage(ciImage, from: ciImage.extent) else { return nil }
        return UIImage(cgImage: cgImage)
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,815评论 1 32
  • 【七绝(新韵)】 落拓潇湘年复年,壮怀每欲解民悬。 案难处断唯寻律,老愈磷峋骨愈坚。
    飞哥判案阅读 308评论 0 5
  • 为什么有时候红葡萄酒喝下去有灼烧感? 因为温度太高了! 为什么有时候白葡萄酒喝下去觉得没什么味道?因为温度太低了呀...
    企鹅吃喝指南阅读 1,394评论 0 2
  • 晚上用青汁和酸奶代餐 每天一个青梅 每天散步加跑步一个小时 两个星期断食一天 一定要瘦到105斤!!!
    Cambodia阅读 127评论 0 0
  • 一对夫妻中年得子,心里特别高兴,他们用心照顾孩子。 孩子渐渐长大,上完小学,上中学,最后考入名牌大学。大学毕业,他...
    梓姝zs阅读 770评论 6 14

友情链接更多精彩内容