MPMoviePlayerController ist ein Singleton unter der Haube. Wenn Sie das Objekt (ObjC) oder Dispose() 'd (MonoTouch) nicht ordnungsgemäß freigegeben haben und eine zweite Instanz erstellen, wird es entweder nicht wiedergegeben oder nur wiedergegeben.
Zusätzlich, wenn Sie zu MPMoviePlayerScalingModeDidChangeNotification oder MPMoviePlayerPlaybackDidFinishNotification oder MPMoviePlayerContentPreloadDidFinishNotification abonnieren, davor gewarnt, dass der entsandte NSNotification zum MPMoviePlayerController eine Referenz nimmt als gut, so, wenn Sie es halten um, werden Sie einen Verweis auf die Spieler haben.
Obwohl der Garbage Collector von Mono irgendwann kick-in ist, ist dies ein Fall, in dem deterministische Terminierung gewünscht ist (Sie wollen die Referenz jetzt, nicht gegangen, wenn der GC beschließt, eine Sammlung durchzuführen).
Aus diesem Grund möchten Sie die Dispose() - Methode auf dem Controller und die Dispose() -Methode für die Benachrichtigung aufrufen.
Zum Beispiel:
// Deterministic termination, do not wait for the GC
if (moviePlayer != null){
moviePlayer.Dispose()
moviePlayer = null;
}
Wenn Sie Benachrichtigungen zuhörten, rufen Sie Dispose in Ihren Benachrichtigungs-Handler am Ende, den Verweis freizugeben, als es zu einem MPMoviePlayerController zum Beispiel hält:
var center = NSNotificationCenter.DefaultCenter;
center.AddObserver (
"MPMoviePlayerPlaybackDidFinishNotification"),
(notify) => { Console.WriteLine ("Done!"); notify.Dispose(); });