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()对引用次数减一,释放对这片内存的控制。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章