2

C 関数 (Audio Queue Services のコールバック関数) があり、自分自身にメッセージを送信したいと考えています。どうやってするか?[self message] と入力すると、エラーが発生します。

Use of undeclared identifier 'self'
4

2 に答える 2

4

オーディオなどのリアルタイム コールバックで objc メッセージを実行しません。この理由は、objc メッセージングは​​一定時間ではなく、ロックされる可能性があり、締め切りに間に合わず、オーディオのドロップアウトが発生する可能性があるためです。静的または動的 ( virtual) C++ 呼び出しと C 関数呼び出しはもちろん一定時間であり、リアルタイム コンテキストに適しています。

リアルタイム/オーディオ コールバックでない場合self、1 つのオプションは、ユーザー情報またはコンテキスト パラメーターとして渡すことです。

void SomeCallback(t_stuff* const stuff, void* userInfo) {
  MONClass * Self = (MONClass*)userInfo;
  [Self doSomething];
}
于 2012-04-30T04:56:52.977 に答える
3

selfクラス定義のコンテキストでのみ意味があります。これは、そのクラスのインスタンスへのポインターです。関数はクラスの一部ではないため、selfポインターはありません。コールバックが特定のオブジェクトにメッセージを送信できるようにする場合は、コールバックが見つけられるオブジェクトへのポインターを隠しておく必要があります。それは、グローバル変数 (ick)、userInfoこの種のことだけを目的としたパラメーター (はるかに優れています)、または他の場所である可能性があります。

于 2012-04-30T04:56:22.480 に答える