Я пытаюсь устранить задержку запуска при воспроизведении аудиофайла (очень короткого - менее 2 секунд) через AVAudioPlayer на iPhone.
Сначала код:
NSString *audioFile = [NSString stringWithFormat:@"%@/%@.caf", [[NSBundle mainBundle] resourcePath], @"audiofile"];
NSData *audioData = [NSData dataWithContentsOfMappedFile:audioFile];
NSError *err;
AVAudioPlayer *audioPlayer = [(AVAudioPlayer*)[AVAudioPlayer alloc] initWithData:audioData error:&err];
audioPlayer.delegate = self;
[audioPlayer play];
Я также реализую метод audioPlayerDidFinishPlaying для выпуска AVAudioPlayer, как только я закончу.
В первый раз, когда я воспроизвожу аудио, отставание ощутимо - не менее 2 секунд. Однако после этого звук воспроизводится немедленно. Я подозреваю, что виновником является то, что [NSData dataWithContentsOfMappedFile] долгое время читает со вспышки, но затем быстро переходит к более позднему чтению. Я не уверен, как это проверить.
Это так? Если да, должен ли я предварительно кэшировать объекты NSData и быть агрессивным относительно их очистки в условиях низкой памяти?