首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >movieplayer发布时内存泄漏

movieplayer发布时内存泄漏
EN

Stack Overflow用户
提问于 2012-10-04 17:49:35
回答 1查看 126关注 0票数 0

在我的一个应用程序中,我想使用以下代码播放来自local.so iam的视频文件。

代码语言:javascript
复制
-(IBAction)playMovie{

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Myvideo" ofType:@"mov"]];

MPMoviePlayerController *moviePlayer=[[[MPMoviePlayerController alloc]initWithContentURL:url]autorelease];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:moviePlayer];

moviePlayer.controlStyle = MPMovieControlStyleEmbedded;
moviePlayer.shouldAutoplay = YES;

[self.view addSubview:moviePlayer.view];
[moviePlayer setFullscreen:YES animated:YES];
//[moviePlayer release];
}

-(void) moviePlayBackDidFinish:(NSNotification*)notification {

MPMoviePlayerController *moviePlayer = [notification object];

[[NSNotificationCenter defaultCenter] removeObserver:self      
                                                name:MPMoviePlayerPlaybackDidFinishNotification
                                              object:moviePlayer];
if ([moviePlayer 
     respondsToSelector:@selector(setFullscreen:animated:)])
{
   [moviePlayer.view removeFromSuperview];
}
[moviePlayer release];

}

当我对上面的代码进行分析或分析时,发现有两个地方发生了潜在的泄漏警告,

代码语言:javascript
复制
[moviePlayer setFullscreen:YES animated:YES];

//[moviePlayer release];

这一部分还有一个漏洞

代码语言:javascript
复制
{

  [moviePlayer.view removeFromSuperview];

}
[moviePlayer release]

那么如何避免这个内存leak.Even我试着在代码开始时自动释放NSURL行,当我做自动释放泄漏不会发生但视频不会play.so如何解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2012-10-04 17:54:45

在moviePlayBackDidFinish方法中尝试一下,可能会有所帮助

代码语言:javascript
复制
 if (videoPlayer) {
    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification object:videoPlayer];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerLoadStateDidChangeNotification object:videoPlayer];

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMovieMediaTypesAvailableNotification object:videoPlayer];
    [videoPlayer pause];
    videoPlayer.initialPlaybackTime = -1;
    [videoPlayer stop];
    [videoPlayer.view removeFromSuperview];
    [videoPlayer release];
    videoPlayer = nil;
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12724630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档