Должна ли функция обратного вызова аудио-очереди быть функцией стиля C?Или это может быть объективный метод в стиле C? - PullRequest
4 голосов
/ 31 марта 2011

Должна ли функция обратного вызова аудио-очереди быть функцией стиля C? Или это может быть объективный метод в стиле C?

Ответы [ 2 ]

7 голосов
/ 31 марта 2011

полностью зависит от API;если API вызывает функцию, блок или метод, это то, что вы должны использовать.

Пока тип функции обратного вызова имеет вид:

void (*hollabackman)(AudioGunk*foo, void*context);

И API для настройкидо обратного вызова что-то вроде:

setCallback(hollabackman func, void *context);

Тогда вы можете:

- myMethod
{
    setCallback(&myCallbackFunc, (void *)self);
}

- (void) hollaedBack: (AudioGunk*) aGunk
{
.....
}

Затем:

void myCallbackFunc(AudioGunk *foo, void *context)
{
    MyClass *self = (MyClass *) context;
    [self hollaedBack: foo];
}

Я бы предложил вам retain себя, когданастроить обратный вызов и сбалансировать его только с release, когда вы снимаете обратный вызов.

1 голос
/ 31 марта 2011

CoreAudio (включая AudioQueueServices) не имеет интерфейса ObjectiveC - чистый C - это ответ для прямого взаимодействия с CoreAudio.

Однако вы можете создать некоторые C-функции-обертки, вызывающие одноэлементный метод объекта ObjectiveC.

...