views:

40

answers:

2

I am facing problem of memory leak and other MoviePlayer new initiation as my MoviePlayer doesn't respond to function, in which I am releasing that player on my done button.

(void) playMovieAtURL
{

    MPMoviePlayerViewController *mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoURL]];
    mpViewController.view.backgroundColor = [UIColor blackColor];
    [self presentMoviePlayerViewControllerAnimated:mpViewController];

    [mpViewController.view setCenter:self.view.center];

    [[NSNotificationCenter defaultCenter] addObserver:self 
                                             selector:@selector(myMovieFinishedCallback:) 
                                                 name:MPMoviePlayerPlaybackDidFinishNotification 
                                               object:mpViewController]; 

} 


    // When the movie is done,release the controller. (Doesn't come in it.)
-(void)myMovieFinishedCallback:(NSNotification*)aNotification 
{
    MPMoviePlayerController* theMovie=[aNotification object]; 
    [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                    name:MPMoviePlayerPlaybackDidFinishNotification 
                                                  object:theMovie]; 

    // Release the movie instance created in playMovieAtURL
    [theMovie release]; 
}
A: 

Not sure it's your case, but this is what documentation says about MPMoviePlayerPlaybackDidFinishNotification:

This notification is not sent in cases where the movie player is displaying in fullscreen mode and the user taps the Done button. In that instance, the Done button causes movie playback to pause while the player transitions out of fullscreen mode. If you want to detect this scenario in your code, you should monitor other notifications such as MPMoviePlayerDidExitFullscreenNotification.

It seems that MPMoviePlayerPlaybackDidFinishNotification is called just when the movie stops by itself. If you are using the Done button, you should use MPMoviePlayerDidExitFullscreenNotification instead.

notme
A: 

I tried to solve it by passing nil and now it is returning me callbacks but still the movie won't releases, I will try ur suggestion also. Anyways my new code

-(void) playMovieAtURL

{

MPMoviePlayerViewController *mpViewController = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:videoURL]];
mpViewController.view.backgroundColor = [UIColor blackColor];
[self presentMoviePlayerViewControllerAnimated:mpViewController];

[mpViewController.view setCenter:self.view.center];

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(myMovieFinishedCallback:) 
                                             name:MPMoviePlayerPlaybackDidFinishNotification 
                                           object:nil]; 

}

// When the movie is done,release the controller. -(void)myMovieFinishedCallback:(NSNotification*)aNotification { MPMoviePlayerController* theMovie=[aNotification object]; [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:nil];

// Release the movie instance created in playMovieAtURL
[theMovie release]; 

}