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()對引用次數減一,釋放對這片內存的控制。

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