MPMoviePlayerController - это синглтон под капотом. Если вы не выполнили надлежащим образом release'd (ObjC) или Dispose () 'd (MonoTouch) и создали второй экземпляр, он либо не будет воспроизводиться, либо воспроизводит только аудио.
Кроме того, если вы подписываетесь на MPMoviePlayerScalingModeDidChangeNotification или MPMoviePlayerPlaybackDidFinishNotification или MPMoviePlayerContentPreloadDidFinishNotification, имейте в виду, что опубликованное NSNotification принимает ссылку на MPMoviePlayer, так что вы всегда будете иметь в виду, что у вас есть ссылка, так что вы будете иметь это, даже если у вас есть ссылка, так что вы будете держать ее под контролем, даже если у вас будет такая возможность, вы даже будете держать ее, даже если у вас будет такая возможность, даже если у вас будет ссылка, даже если вы будете иметь ее, вы будете держать ее под контролем, даже если у вас будет такая возможность, вы будете держать ее под контролем, даже если у вас будет такая возможность, даже если у вас будет ссылка, даже если у вас будет такая возможность, вы будете держать ее под контролем, даже если у вас будет такая возможность, даже если у вас будет ссылка, даже если у вас будет ссылка, даже если у вас будет ссылка, даже если у вас будет ссылка, даже если у вас будет ссылка, даже если у вас будет ссылка, даже если у вас будет ссылка, даже если у вас будет ссылка, вы будете держать ее под контролем.
Несмотря на то, что Mono's Garbage Collector в конечном итоге включится, это тот случай, когда требуется детерминированное завершение (вы хотите, чтобы ссылка ушла сейчас , а не исчезла, когда GC решит выполнить сбор).
Вот почему вы хотите вызвать метод Dispose () на контроллере и метод Dispose () в уведомлении.
Например:
// Deterministic termination, do not wait for the GC
if (moviePlayer != null){
moviePlayer.Dispose ()
moviePlayer = null;
}
Если вы слушали уведомления, в конце вызовите Dispose в обработчике уведомлений, чтобы освободить ссылку, которую он хранит, на ваш MPMoviePlayerController, например:
var center = NSNotificationCenter.DefaultCenter;
center.AddObserver (
"MPMoviePlayerPlaybackDidFinishNotification"),
(notify) => { Console.WriteLine ("Done!"); notify.Dispose (); });