Я читаю аудиофайл в ОЗУ, используя следующий метод, передавая объект MPMediaItem. Тем не менее, каждый раз, когда это вызывается, начало функции должно освобождать память, используемую для предыдущего аудиофайла, а это не так, т.е. Xcode показывает, что использование памяти продолжает увеличиваться при каждом вызове функции и, в конечном итоге, в ОС заканчивается память.Как освободить память, используемую AudioFileReadPacketData - Xcode показывает, что память все еще используется
Я делаю что-то явно неправильно?
Примечание: ниже функция является единственным местом, я использую мой аудиоданные Ивар
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...");
}
EDIT: Я использовал ту же самую структуру кода и читать данные звукового файла используя вместо этого функцию ExtAudioFileRead, и память освобождается и перераспределяется как предположительно. Это может быть связано с тем, как я использую функцию AudioFileReadPacketData =/
Если вы запустите инструмент памяти в инструментах, вы сможете лучше понять, какой бит памяти висит. –
Я вижу, что аудиофайлы читаются в ОЗУ и помещаются в мой аудиодатчик ivar и которые я не могу освободить ... – believesInSanta
Я не понимаю, почему все эти файлы накапливаются - они должны быть освобождены, когда я звоню бесплатно (audioData) ? Зачем...? – believesInSanta