Я обнаружил, что MPMoviePlayerController должен быть отправлен стоп-сообщение, прежде чем вы сможете его безопасно разблокировать. Поэтому я делаю это в handlePlaybackEnd - сначала я прекращаю его, затем я автоматически освобождаю его. Вызов релиза, кажется, не слишком хорошо работает:
- (void) moviePlayBackDidFinish : (NSNotification *) notification
{
VideoPlayerController * player = notification.object;
[player stop];
[player autorelease];
}
Все становится немного хитрее, так как MPMoviePlayerPlaybackDidFinishNotification может отправляться более одного раза, но вызов stop / autorlease дважды также не принесет вам пользы. Так что вам нужно как-то остерегаться этого.
Наконец, кажется, что потребуется несколько итераций основного цикла выполнения, пока вы не сможете безопасно создать новый экземпляр MPMoviePlayerController. Если вы сделаете это слишком быстро, вы получите звук, но нет видео. Отлично, да?