Проблема в том, что при компиляции с ARC вам необходимо сохранять ссылку на экземпляры, которые вы хотите сохранить в живых, поскольку компилятор автоматически исправит "несбалансированный" alloc
, вставив release
звонки (по крайней мере, концептуально, прочитайте сообщение в блоге Майка Эша для более подробной информации ).Вы можете решить эту проблему, назначив экземпляр свойству или переменной экземпляра.
В случае Phlibbo код будет преобразован в:
- (void)viewDidLoad
{
[super viewDidLoad];
NSString* recorderFilePath = [NSString stringWithFormat:@"%@/MySound.mp3", [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"]];
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:recorderFilePath] error:nil];
audioPlayer.numberOfLoops = 1;
[audioPlayer play];
[audioPlayer release]; // inserted by ARC
}
И AVAudioPlayer
прекратит воспроизведениесразу же, как он освобождается, когда не осталось никаких ссылок.
Я сам не использовал ARC и только что кратко прочитал об этом.Пожалуйста, прокомментируйте мой ответ, если вы знаете больше об этом, и я обновлю его с дополнительной информацией.
Дополнительная информация о ARC:
Переход к заметкам о выпуске ARC
LLVM Автоматический подсчет ссылок