C 関数 (Audio Queue Services のコールバック関数) があり、自分自身にメッセージを送信したいと考えています。どうやってするか?[self message] と入力すると、エラーが発生します。
Use of undeclared identifier 'self'
C 関数 (Audio Queue Services のコールバック関数) があり、自分自身にメッセージを送信したいと考えています。どうやってするか?[self message] と入力すると、エラーが発生します。
Use of undeclared identifier 'self'
オーディオなどのリアルタイム コールバックで objc メッセージを実行しません。この理由は、objc メッセージングは一定時間ではなく、ロックされる可能性があり、締め切りに間に合わず、オーディオのドロップアウトが発生する可能性があるためです。静的または動的 ( virtual
) C++ 呼び出しと C 関数呼び出しはもちろん一定時間であり、リアルタイム コンテキストに適しています。
リアルタイム/オーディオ コールバックでない場合self
、1 つのオプションは、ユーザー情報またはコンテキスト パラメーターとして渡すことです。
void SomeCallback(t_stuff* const stuff, void* userInfo) {
MONClass * Self = (MONClass*)userInfo;
[Self doSomething];
}
self
クラス定義のコンテキストでのみ意味があります。これは、そのクラスのインスタンスへのポインターです。関数はクラスの一部ではないため、self
ポインターはありません。コールバックが特定のオブジェクトにメッセージを送信できるようにする場合は、コールバックが見つけられるオブジェクトへのポインターを隠しておく必要があります。それは、グローバル変数 (ick)、userInfo
この種のことだけを目的としたパラメーター (はるかに優れています)、または他の場所である可能性があります。