gpt4 book ai didi

iphone - CFRelease 但仍然泄漏

转载 作者:行者123 更新时间:2023-11-29 13:14:17 25 4
gpt4 key购买 nike

这让我大吃一惊。我从 iPod 库中读取音频以分析音频样本,我可以做我想做的事,缓冲区总是泄漏,我收到低内存警告并且应用程序被终止。我尝试了所有建议但没有成功。下面的代码被合并到一个静态库中并且读取音频工作正常,只是缓冲区永远不会被释放。我使用 ARC 并且也尝试不调用 CFRelease 但同样的事情......感谢任何建议,我完全卡住了!!!

- (NSInteger) getMP3Samples:(SInt16*)address{
AudioBufferList audioBufferList;

if (_assetReader == nil) {
return 0;
}

_mp3Control.currentSampleBufferCount = 0;
CMSampleBufferRef nextBuffer =[_assetReaderOutput copyNextSampleBuffer];

// Is the Song ended
if (nextBuffer == nil){
if ([_assetReader status] == AVAssetReaderStatusCompleted) {
[_assetReader cancelReading];
}
_assetReader = nil;
_assetReaderOutput = nil;
return _mp3Control.currentSampleBufferCount;
}

CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(
nextBuffer,
NULL,
&audioBufferList,
sizeof(audioBufferList),
NULL,
NULL,
kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment,
&_mp3Control.blockBuffer);

if (nextBuffer) {
CMSampleBufferInvalidate(nextBuffer);
CFRelease(nextBuffer);
nextBuffer=NULL;
}

for (int b=0; b < audioBufferList.mNumberBuffers; b++) {
memcpy((void *)(address+_mp3Control.currentSampleBufferCount),(void *)audioBufferList.mBuffers[b].mData,audioBufferList.mBuffers[b].mDataByteSize);
_mp3Control.currentSampleBufferCount+=audioBufferList.mBuffers[b].mDataByteSize;
}
///
/// Return samples and not bytes!!
///
return _mp3Control.currentSampleBufferCount/2;
}

最佳答案

您是否在(未发布的)调用代码中使用和释放由 CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer 返回的 block 缓冲区?
如果您在调用 getMP3Samples: 后没有释放存储在 &_mp3Control.blockBuffer 中的对象,这可能是您的内存管理问题。 (Core Foundation 风格的对象不参与 ARC)

您还可以通过 Allocation & Leaks Instruments 运行您的代码以查看更多详细信息(我只是在这里猜测 :))。

关于iphone - CFRelease 但仍然泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16228926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com