4

Audio Queue コールバック関数は C スタイルの関数でなければなりませんか? それとも、客観的なCスタイルのメソッドにすることができますか?

4

2 に答える 2

7

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ます。

于 2011-03-31T16:31:16.730 に答える
1

CoreAudio (AudioQueueServices を含む) には ObjectiveC インターフェイスがありません。純粋な C は、CoreAudio と直接インターフェイスするための答えです。

ただし、シングルトンの ObjectiveC オブジェクト メソッドを呼び出すいくつかのラッピング C 関数を作成することはできます。

于 2011-03-31T16:32:39.850 に答える