Я пытаюсь устранить задержку запуска при воспроизведении (очень короткого - менее 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 и быть агрессивными при их очистке в условиях нехватки памяти?
UIApplicationWillEnterForegroundNotification
, в противном случае есть задержка после возобновления работы приложения из фона. - person Pang   schedule 17.01.2016