gpt4 book ai didi

ios - 如何释放 AudioFileReadPacketData 使用的内存 - Xcode 显示内存仍在使用中

转载 作者:行者123 更新时间:2023-11-30 17:28:19 24 4
gpt4 key购买 nike

我正在使用以下方法通过传递 MPMediaItem 对象将音频文件读入 RAM。然而,每次调用此函数时,该函数的开头应该释放用于前一个音频文件的内存,但事实并非如此,即,Xcode 显示每次调用该函数时内存使用量不断增加,最终操作系统内存不足。

我做错了什么吗?

注意:下面的函数是我使用我的audioData ivar的唯一地方

Memory allocation summary in Instruments

The same audio file cached in memory by below function

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 函数的方式有关=/

最佳答案

在释放 AudioFileID 资源之前,您需要调用 AudioFileClose

否则 AudioFile 会保留对音频数据 void 指针的引用,并且无法释放内存。

if (audioData != NULL) {
NSLog(@"audio data pointer not empty");
AudioFileClose(audioFileID); // <- missing call
free (audioData);
}

关于ios - 如何释放 AudioFileReadPacketData 使用的内存 - Xcode 显示内存仍在使用中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26076641/

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