私のコードでは、1秒間に何度も呼び出されるコールバック関数があるときに、オーディオバッファーを使用しています。このコールバックは、音声を処理するクラスにあり、アプリのメインクラスにはありません。
開始時に、コールバック中に何度もログに記録されるこの警告が表示されていました。
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
私はここで正確に何をしましたか?何故ですか ?記憶の面からは大丈夫ですか?
どうもありがとう 。