试图理解 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);