2012-02-11 4 views
4

Я ищу более простой способ манипулировать звуковыми буферами на iPhone. В основном я стараюсь избегать проблем с указателями и проблемами с подсчетом массивов с помощью C, но не хочу, чтобы их замещали числовые объекты, такие как NSNumber или NSInteger, которые мне пришлось бы использовать с NSArray.Разница между CFArray и NSArray

Я столкнулся с CFArray, который кажется, что это может быть хорошая промежуточная площадка. Правильно ли я в этом предположении? Или я чего-то не хватает?

ответ

11

Не совсем. CFArray в основном то же самое, что и NSArray, вы можете даже бросить между ними, это называется toll-free bridging.

CFArray (и его изменчивый аналог) не позволяют задавать свои собственные функции обратного вызова для удержания и освобождения объектов (указатели) в массиве, что позволит вам хранить произвольные указатели (а не только NSObject ы) в массиве и реализовать свою собственную схему управления памятью, но я сомневаюсь, что это приведет к любой реальной прибыли от производительности. Для вашего случая использования C-массивы - это, вероятно, путь.

3

Если производительность и объем памяти являются предметом беспокойства, которые, скорее всего, будут предназначены для обработки звука в реальном времени, придерживаться простых массивов C и узнавать, как правильно передавать и передавать массив массива.

В любом случае вам нужно обрабатывать аудио в C-массивах, так как API-интерфейс IOS Audio Queue и Audio Unit API передают аудиоданные с помощью C-массивов.

1

Если вам не нравится стиль C и вы хотите использовать некоторый предметный стиль, ориентированный на объекты, я бы рекомендовал использовать C++, например. std :: вектор или аналогичный. Не используйте Objective-C для звука, это не сделано для обработки сигнала! Obj-C отлично подходит для работы с пользовательскими интерфейсами и подключения объектов в системе сигнализации. Любое «реальное» вычисление всегда должно выполняться в C или flat C++.

Смежные вопросы