Iphone 在回调函数中调用目标c函数
如何在回调函数中调用目标c函数 回调函数:Iphone 在回调函数中调用目标c函数,iphone,ios,objective-c,callback,Iphone,Ios,Objective C,Callback,如何在回调函数中调用目标c函数 回调函数: static OSStatus inputRenderCallback ( void *inRefCon, AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumbe
static OSStatus inputRenderCallback (
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData
) {
soundStructPtr soundStructPointerArray = (soundStructPtr) inRefCon;
UInt32 frameTotalForSound = soundStructPointerArray[inBusNumber].frameCount;
BOOL isStereo = soundStructPointerArray[inBusNumber].isStereo;
AudioUnitSampleType *dataInLeft;
AudioUnitSampleType *dataInRight;
dataInLeft = soundStructPointerArray[inBusNumber].audioDataLeft;
if (isStereo) dataInRight = soundStructPointerArray[inBusNumber].audioDataRight;
AudioUnitSampleType *outSamplesChannelLeft;
AudioUnitSampleType *outSamplesChannelRight;
outSamplesChannelLeft = (AudioUnitSampleType *) ioData->mBuffers[0].mData;
if (isStereo) outSamplesChannelRight = (AudioUnitSampleType *) ioData->mBuffers[1].mData;
UInt32 sampleNumber = soundStructPointerArray[inBusNumber].sampleNumber;
for (UInt32 frameNumber = 0; frameNumber < inNumberFrames; ++frameNumber) {
outSamplesChannelLeft[frameNumber] = dataInLeft[sampleNumber];
if (isStereo) outSamplesChannelRight[frameNumber] = dataInRight[sampleNumber];
sampleNumber++;
if (sampleNumber >= frameTotalForSound){
sampleNumber = 0;
}
}
soundStructPointerArray[inBusNumber].sampleNumber = sampleNumber;
return noErr;
}
现在在
if (sampleNumber >= frameTotalForSound){
sampleNumber = 0;
}
回调函数的一部分如何调用stopAUGraph函数。对象有方法,没有函数。方法不被调用,但消息被发送到执行该方法的接收器 因此,您需要引用实例作为消息的接收者,从而导致方法的执行。有两种方法可以获得它: B.A.通常回调有一个userInfo指针,它可以直接或在结构中保存引用 B.B.如果你没有这样的信息,你可以向单身汉索取,或者使用全局变量。这更糟糕 C.在获得这样一个接收方引用后,如果它被编译为Objective-C代码(filename.m或Xcode中的设置),则可以在C函数中使用常用的消息语法: 例如,如果获得方法的实现指针或使用rte,也可以使用函数调用。获取实现指针更糟糕,因为它关闭了多态机制
if (sampleNumber >= frameTotalForSound){
sampleNumber = 0;
}
void function (void *userInfo)
{
id reference = userInfo; // Using ARC you have to clarify the ownership with castings.
[reference message];
}