在我的代码中,当我有一个每秒被调用多次的回调函数时,我正在使用音频缓冲区。此回调在处理音频的类中,而不是在 app 的主类中。
一开始,我收到了在回调期间多次记录的警告:
Object 0x93cd5e0 of class __NSCFNumber autoreleased with no pool in place - just leaking - break on objc_autoreleaseNoPool()
然后我被告知将这一行放在回调函数中:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
然后这个错误消失了。但我不明白我怎么可能在 1 秒内多次分配池 - 也许我有内存问题。我看到我必须把它放在最后:
[pool drain];
所以我有这个:
OSStatus status;
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // that line added
//run on evert sample
int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
for(int i=0; i < inNumberFrames; i++)
{
static int stateMachineSelector=1;
static int sampelsCounter=0;
// CODE TO HANDLE THE SAMPLES ...
}
[pool drain]; // issue here
我到底在这里做了什么?这是为什么 ?从记忆方面来说可以吗?
多谢 。