我正在通过传递MPMediaItem对象使用以下方法将音频文件读入RAM中。但是,每次调用这个函数时,函数的开始都会释放用于前一个音频文件的内存,而不是这样,即Xcode显示每次调用该函数时内存使用量都会持续增加,最终会导致OS内存耗尽。如何释放AudioFileReadPacketData使用的内存 - Xcode显示仍在使用的内存
我在做什么明显错误?
注:以下功能是我使用我的audioData伊娃
void *audioData;
- (void)playItem:(MPMediaItem *)mediaItem
{
if (audioData != NULL) {
NSLog(@"audio data pointer not empty");
free (audioData);
}
// open audio file
AudioFileID audioFileID;
NSURL *mediaItemURL = [mediaItem valueForProperty:MPMediaItemPropertyAssetURL];
OSErr err;
err = AudioFileOpenURL((__bridge CFURLRef)mediaItemURL,
kAudioFileReadPermission,
0,
&audioFileID);
NSAssert(err == noErr, @"Couldn't open audio file...");
// read audio file properties and malloc audioData property
UInt32 audioDataPacketCount;
UInt32 audioDataPacketCountSize = sizeof(audioDataPacketCount);
err = AudioFileGetProperty(audioFileID,
kAudioFilePropertyAudioDataPacketCount,
&audioDataPacketCountSize,
&audioDataPacketCount);
NSAssert(err == noErr, @"Couldn't read audio file properties...");
UInt32 audioDataByteCount;
UInt32 audioDataByteCountSize = sizeof(audioDataByteCount);
err = AudioFileGetProperty(audioFileID,
kAudioFilePropertyAudioDataByteCount,
&audioDataByteCountSize,
&audioDataByteCount);
NSAssert(err == noErr, @"Couldn't read audio file properties...");
audioData = malloc(audioDataByteCount);
// read audio file packets
err = AudioFileReadPacketData(audioFileID,
false,
&audioDataByteCount,
NULL,
0,
&audioDataPacketCount,
audioData);
NSAssert(err == noErr, @"Couldn't read audio file to memory...");
}
编辑的唯一的地方:我用同样的代码结构和读取音频文件数据使用ExtAudioFileRead函数取而代之的是内存释放并重新分配。这可能与我如何使用AudioFileReadPacketData功能有关=/
如果你在仪器中运行内存工具,那么你应该能够更好地了解哪一点内存在悬挂。 – 2014-09-27 16:35:07
我看到音频文件读取到RAM并放入到我的audioData伊娃,我不能免费... – believesInSanta 2014-09-27 16:37:53
我不明白为什么所有这些文件都积累 - 他们应该释放时,我打电话免费(audioData) ?为什么...? – believesInSanta 2014-09-27 16:48:10