OC CVPixelBuffer内存管理

CVPixelBuffer可以用来保存多种格式的图像数据,包括YUV/RGBA等。在CVPixelBuffer的内存管理,包括何时释放,生命周期等,遇到一些坑,总结如下:

1.OC的部分变量是系统管理,叫做ARC控制,不需要开发者来管理;有一些变量不受ARC控制(一般是C开头的变量,cv,cf等),需要开发者手动管理,手动释放,CVPixelBuffer就是这类变量。

2.OC变量管理,常用两个函数,CFRetain和CFRelease,分别对变量的保存次数加减一,我想是当这个次数为0时,也即释放了变量的内存,所以通过这两个函数可以动态控制变量的生命周期。

3.管理CVPixelBuffer生命周期的主要有两个函数,CVPixelBufferRetain(),CVPixelBufferRelease(),这两个函数与CFRetain和CFRelease的作用类似,对CVPixelBuffer变量进行记次,通过CFGetRetainCount可以获取当前的引用次数。最有一次调用CVPixelBufferRelease()时,也即引用次数为0时,此时CVPixelBuffer变量内存真正释放,但变量的地址没变,也不为空,只是里面内存数据销毁,这个很容易出错。

4.CVPixelBufferRetain()和CVPixelBufferRelease()需成对调用,否则很容易内存泄漏。

5.一般调用CVPixelBufferRetain()时,都是将当前pixerbuffer赋值给另一个pixelbuffer,这样新的pixelbuffer就可以控制变量内存的生命周期,保证在调用期间,这片内存不在其他地方被释放。调用结束后通过CVPixelBufferRelease()对引用次数减一,释放对这片内存的控制。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值