iphone - MPMoviePlayerController 仍然泄漏

标签 iphone ios memory-management memory-leaks mpmovieplayercontroller

我释放了 MPMoviePlayerController 但内存分配和事件对象仍然高于对象分配之前。但是,如果我重新分配对象,它不会泄漏更多。 我的应用程序实际上使用了很多媒体文件并且内存消耗很高。我想完全释放不需要的内存以避免内存警告。

电影播放器​​版本:

        player.initialPlaybackTime = -1;
        [player.view removeFromSuperview];
        [player stop];
        [player release];

电影播放器​​分配:

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"video0_hd.mov" ofType:nil]];
    player = [[MPMoviePlayerController alloc] initWithContentURL:url];
    player.view.frame = placeholder.frame;
    [self.view addSubview:player.view];
    [player play];

最佳答案

我也有这个问题。

iPad 用于预加载视频流的缓存未完全清空。 所以每次,这个带有视频播放器的页面都会被清理释放,清理后分配的内存仍然包含缓存内存。对于大视频,这可能高达 50 MB。

这实际上不是内存泄漏:

如果再次打开该页面,则重新分配缓存。但是仍然令人沮丧,因为你想要一个干净的退出情况,这意味着当这个页面被留下并被清理时,这个页面使用的所有内存都应该被释放,包括用于缓存视频流的内存......!

经过一些认真的调整后,这一系列命令似乎可以完成工作:

======================

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerPlaybackDidFinishNotification
                                                  object:myMoviePlayer];        

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMoviePlayerDidExitFullscreenNotification
                                                  object:myMoviePlayer];        

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

    [[NSNotificationCenter defaultCenter] removeObserver:self
                                                    name:MPMovieDurationAvailableNotification
                                                  object:myMoviePlayer];        
    [myMoviePlayer pause];
    myMoviePlayer.initialPlaybackTime = -1;
    [myMoviePlayer stop];
    myMoviePlayer.initialPlaybackTime = -1;
    [myMoviePlayer.view removeFromSuperview];
    [myMoviePlayer release];

=================================

步骤:

1 - 删除您用于电影播放器​​的所有通知程序。

2 - 暂停电影

3 - 设置播放时间开始

4 - 停止电影

5 - 再次设置播放时间开始

6 - 现在删除电影 View

7 - 最后释放电影播放器​​

在我的情况下,我的 iPad (OS 4.2) 上的视频缓存也被释放了。 并留下一个干净的分配内存情况,等于打开视频播放器页面之前的大小。所以同样进入和退出内存。

希望这对你有帮助......

关于iphone - MPMoviePlayerController 仍然泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3384388/

相关文章:

c - 动态内存分配(malloc): why does the whole string get printed even though I did not allocate required memory?

c++ - 访问 vector 时出现运行时错误

iphone - UITextField 响应者行与边框重叠,如何定位响应者?

iphone - UIViewController 不调用 dealloc 或调用它两次

iphone - 在 xCode 4.2 上安装 zxing 时出现问题

ios - 如何在第一次查看时获取 statusBarOrientation

ios - 如何只在 ELCImagePickerController 中选择视频?

ios - AVAudioPlayer初始化和内存管理

iphone - 管理 iphone 项目中的构建目标变量

ios - 自定义 UIView 在 addSubview 上不可见