WWDC 2012 の MTAudioProcessingTap サンプル コードを理解しようとしています。
この構造体は、Tap がデータを渡すために使用されます。
typedef struct AVAudioTapProcessorContext {
...
void *self; //Note use of word self
} AVAudioTapProcessorContext;
ここにある単語self
は、Xcode でピンク色で強調表示されていますが、明らかに標準の変数名として使用されています。これは Xcode でのコード解析の単なる見落としですか?
その後、Tap 管理クラスは自身への参照をこの変数に渡します。
//Setting up Tap callbacks:
callbacks.clientInfo = (__bridge void *)self,
//And then storing it in the above struct when it's passed by the callback:
static void tap_InitCallback(MTAudioProcessingTapRef tap, void *clientInfo, void **tapStorageOut)
{
AVAudioTapProcessorContext *context = calloc(1, sizeof(AVAudioTapProcessorContext));
...
context->self = clientInfo;
*tapStorageOut = context;
}
そして、混乱は後の関数 (別の Tap コールバック) で再び始まります。ここでも、単語 self は Tap 管理クラス リファレンスを参照するために使用されます。@end
これは、Tap 管理クラスの実装の後に定義された関数で発生することに注意してください。
AudioFFTTapProcessor *self = ((__bridge AudioFFTTapProcessor *)context->self);