Я вложил в подкласс NSOperation и добавил его экземпляры в NSOperationQue, когда мне это нужно.В основной функции NSOperation я создаю AudioBufferList и затем освобождаю его, когда я закончил.
В разделе выделения памяти инструментов это показывает, что экземпляры этих AudioBufferLists постоянно поднимаются.Живое число байтов постоянно увеличивается, и часть буфера mdata оказывается виновником.
Это часть моего кода.
Правильно ли я освобождаю свой буферный список или инструменты могут бытьнеправильно сообщать?
-(void)main
{
//autorelase stuff in here
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
AudioBufferList *bufferList;
bufferList = (AudioBufferList *) malloc (
sizeof (AudioBufferList) + sizeof (AudioBuffer) * (1)
);
if (NULL == bufferList) {NSLog (@"*** malloc failure for allocating bufferList memory"); return;}
// initialize the mNumberBuffers member
bufferList->mNumberBuffers = 2;
// initialize the mBuffers member to 0
AudioBuffer emptyBuffer = {0};
size_t arrayIndex;
for (arrayIndex = 0; arrayIndex < 2; arrayIndex++) {
bufferList->mBuffers[arrayIndex] = emptyBuffer;
}
// set up the AudioBuffer structs in the buffer list
bufferList->mBuffers[0].mNumberChannels = 1;
bufferList->mBuffers[0].mDataByteSize = numberofframestoread * sizeof (AudioUnitSampleType);
bufferList->mBuffers[0].mData = (AudioUnitSampleType*)calloc(numberofframestoread, sizeof(AudioUnitSampleType));
if (2 == 2) {
bufferList->mBuffers[1].mNumberChannels = 1;
bufferList->mBuffers[1].mDataByteSize = numberofframestoread * sizeof (AudioUnitSampleType);
bufferList->mBuffers[1].mData = (AudioUnitSampleType*)calloc(numberofframestoread, sizeof(AudioUnitSampleType));
}
AudioUnitSampleType *inSamplesChannelLeft=bufferList->mBuffers[0].mData;
AudioUnitSampleType *inSamplesChannelRight=bufferList->mBuffers[1].mData;
// do stuff with buffer here
free(bufferList);
bufferlist=nil;
[pool release]
}