我已經將NSOperation子類化並在需要時將它的實例添加到NSOperationQue中。 在NSOperation的主要功能中,我創建一個AudioBufferList,然後在完成時釋放它。在NSOperation中釋放對象
在樂器的內存分配部分,它顯示了這些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]
}
'*(2 - 1)'?當你返回'NULL == bufferList'時,你也泄漏了一個自動釋放池。你應該發佈你的結構聲明。 – Joe
斑點。另外,你指的是什麼結構聲明? – dubbeat