Hallo. Ich verwende einen MPMoviePlayerController in meiner iPhone App, um manchmal kurze Videoclips anzuzeigen. Es gibt einige Schaltflächen in der App mainView. Wenn ich den Knopf drücke, wird der Film abgespielt. Wenn ich die Taste drücke, ruft die Taste [self playVideo: @ "xxx"] auf und das Video wird korrekt angezeigt. Aber wenn ich die App mit Instruments Allocations Tool sehe, sehe ich, dass der zugewiesene Speicher bis zu 8+ MB bekommt und nicht freigegeben wird, nachdem der Spieler fertig ist. Wenn ich den Knopf nur ungefähr 15. Mal drücke, wird das iPad zusammenbrechen. Verantwortlich für die Zuordnungen ist eine verantwortliche Bibliothek mit der Bezeichnung CoreVideo. Vielleicht ist der Speicher beim Vorabladen des Videos undicht, wenn es nach dem Beenden nicht mehr freigegeben wird. Wie kann ich diese Erinnerung freigeben? Hier sind die Methoden in der Kategorie:Wie kann MPMoviePlayerController Freigabe Speicher
-(id)playVideo:(NSString*)videoName
{
NSString* s = [[NSBundle mainBundle] pathForResource:videoName ofType:@"mp4"];
NSURL* url = [NSURL fileURLWithPath:s];
[self playVideoAtURL: url];
s = nil;
[s release];
url = nil;
[url release];
}
-(void)playVideoAtURL:(NSURL *)theURL
{
theMovie = [[MPMoviePlayerViewController alloc] initWithContentURL:theURL];
theMovie.moviePlayer.scalingMode = MPMovieScalingModeAspectFit;
theMovie.moviePlayer.controlStyle = MPMovieControlStyleFullscreen;
if (LeftOrRight == 0) {
[theMovie.view setTransform: CGAffineTransformMakeRotation(degreesToRadians(-90))];
}
else if (LeftOrRight == 1) {
[theMovie.view setTransform: CGAffineTransformMakeRotation(degreesToRadians(90))];
}
CGRect screenBounds = [[UIScreen mainScreen] bounds];
theMovie.view.frame = screenBounds;
theMovie.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[theMovie.moviePlayer prepareToPlay];
[self presentModalViewController: theMovie animated: YES];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(myMovieFinishedCallback:)
name: MPMoviePlayerPlaybackDidFinishNotification
object:nil];
}
-(void)myMovieFinishedCallback:(NSNotification *)aNotification
{
[[NSNotificationCenter defaultCenter] removeObserver:self
name:MPMoviePlayerPlaybackDidFinishNotification
object:nil];
[theMovie dismissMoviePlayerViewControllerAnimated];
[theMovie.moviePlayer stop];
[theMovie release];
}
Dank!