2012-02-11 37 views
4

我正在尋找一種更簡單的方法來操縱iPhone上的音頻緩衝區。主要是我試圖避免與C的指針問題和數組問題,但不希望被像NSNumber或NSInteger這樣的數字對象放慢,我將不得不使用NSArray。CFArray和NSArray之間的區別

我碰到過CFArray,它似乎可能是一個不錯的中間地帶。我在這個假設中糾正了嗎?或者我錯過了什麼?

回答

11

不是。 CFArray基本上與NSArray一樣,你甚至可以在兩者之間施放,這叫做toll-free bridging

CFArray(及其可變對象)允許您指定自己的回調函數來保留和釋放數組中的對象(指針),這將允許您在數組中存儲任意指針(不僅僅是NSObject s)並實施你自己的內存管理方案,但我懷疑這會導致任何實際的性能收益。對於你的用例,C數組可能是要走的路。

3

如果性能和內存大小是他們可能用於實時音頻處理的任何問題,請堅持使用純C數組,並學習如何正確編碼數組傳遞和訪問。

無論如何,您需要處理C數組中的音頻,因爲iOS音頻隊列和音頻單元API使用C數組傳遞音頻數據。

1

如果你不喜歡C風格,並希望使用一些需要面向對象的類風格,我真的會推薦使用C++,例如。 std :: vector或類似。 不要使用Objective-C進行音頻處理,而不是進行信號處理! Obj-C非常適合在信號系統中處理UI和連接對象。任何一種'真正'的計算都應該用C或C++來完成。