Существует класс RevolverSound
именно для этого варианта использования. Это очень просто, он заранее выделяет количество Sound
экземпляров и затем воспроизводит их по очереди:
- (void) play
{
[[sounds objectAtIndex:current] play];
current = (current + 1) % [sounds count];
}
Это означает, что существует жесткое ограничение на количество звуков, которые могут воспроизводиться одновременно, и использование памяти увеличивается с этим ограничением. Я не нашел, чтобы это было большой проблемой на практике, потому что, когда одновременно звучит пять или более звуков, уже есть такой звуковой хаос, что вы обычно не заметите, что первый не играл до конца перед повторным запуском.