Swift — как использовать malloc?

Я пытаюсь перевести приложение Objective-C на Swift и не знаю, как реализовать malloc.

Можно ли использовать его в Swift?

Спасибо


person MeV    schedule 18.11.2014    source источник
comment
Если вы хотите использовать malloc для выделения некоторого объема памяти, вам не нужно этого делать. Прямое выделение памяти не используется в Swift.   -  person Kyokook Hwang    schedule 18.11.2014
comment
@KyokookHwang: вы можете без проблем использовать malloc() в Swift. Вопрос в том, следует ли это сделать или лучше использовать другие структуры данных (например, массив).   -  person Martin R    schedule 18.11.2014
comment
Это помогло бы увидеть вашу конкретную проблему. Можно использовать malloc(), но могут быть и лучшие альтернативы.   -  person Martin R    schedule 18.11.2014
comment
Спасибо. Мне нужно выделить память для аудиобуфера: buffer.mData = malloc(inNumberFrames * 2); // размер буфера   -  person MeV    schedule 18.11.2014
comment
Тогда я, наверное, найду другое решение. Спасибо   -  person MeV    schedule 18.11.2014
comment
См. также мой ответ здесь: stackoverflow.com/a/26006918/341994   -  person matt    schedule 27.11.2014


Ответы (1)


Вам необходимо реализовать соединительный заголовок, когда вы используете ObjC или C из Swift. Функции, экспортированные вашим связующим заголовком, затем доступны в вашем приложении/модуле Swift. Обзор см. здесь.

Если вам просто нужно «вызвать какой-то код» на стороне C, то функции, экспортированные из C, в основном являются просто оболочками для Swift. Однако, если вам нужно взаимодействовать с данными, возвращаемыми этими функциями, особенно если это malloc, а не простой примитив, в Swift есть несколько типов, связанных с C, готовых для вашего использования (см. здесь ).

Кроме того, если вы пытаетесь обернуть код C++ или взаимодействовать с ним, вы не сможете сделать это напрямую из Swift. Вы должны настроить начальный интерфейс с ObjC или C для кода C++, а затем подключить его к Swift. Совсем не весело, но, к счастью, это не такой распространенный вариант использования, как соединение ObjC (в первую очередь) или C.

... и что бы это ни стоило, если вам по какой-то причине не нужен низкоуровневый Core Audio (конечно, например, для переноса уже имеющегося приложения), AVAudioEngine (iOS8+) настолько намного проще для любого применимого использования случае, чем Core Audio, и легко доступен в Swift.

person greymouser    schedule 18.11.2014
comment
… для любого применимого варианта использования. Ну почти любой случай. Но есть вещи, с которыми AVAudioEngine все еще не может справиться достаточно хорошо спустя два года после того, как был сделан этот комментарий. - person Steve Cotner; 18.03.2017