ios - iOS 中的内存泄漏,AVPlayer 永远不会被释放

标签 ios memory-leaks profiling instruments avplayer

我使用了 Apple docs 中的 AVPlayerDemo 示例并在其上编写了我自己的 UI 来播放从 UITableViewController 中选择的视频。现在,问题是这里某处存在内存泄漏,我无法找到。问题是 AVPlayer 对象没有被释放,我猜这是因为每次按下后退按钮并选择要播放的新视频时,应用程序消耗的总内存都会出现巨大的跳跃,如下所示:

The first time the video is player, the memory usage is 36.6MB

视频第一次播放,内存占用36.6MB,现在播放第二次:

Here it has jumped to 58.2MB

这里它已跃升至 58.2MB,并且每次我返回并再次播放视频或播放不同的视频时,它都会不断增加。

enter image description here

我试过使用 Instruments with Leaks 但还没有弄清楚它有什么问题。

这是整个 Controller 文件 code .

//编辑

-(void) viewWillDisappear:(BOOL)animated{
    [super viewWillDisappear:animated];

    if(_player.rate == 1.0){
        [_player pause];
    }

    [idleTimer invalidate];

    if(mTimeObserver){
        [_player removeTimeObserver:mTimeObserver];
        mTimeObserver = nil;
    }
    [_playerItem removeObserver:self forKeyPath:kStatusKeyT];
    [[NSNotificationCenter defaultCenter] removeObserver:self                                                 name:AVPlayerItemDidPlayToEndTimeNotification object:_playerItem];


    _player = nil;
    _playerItem = nil;
    idleTimer = nil;
    _tapGestureRecognizer = nil;
}

-(void) dealloc
{
    NSLog(@"DEALLOCING");
}

最佳答案

我遇到了和你一样的问题,但我通过在 viewDidDisappear 上调用它来修复内存泄漏:

self.avPlayer?.replaceCurrentItem(with: nil)

关于ios - iOS 中的内存泄漏,AVPlayer 永远不会被释放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24820725/

相关文章:

c++ - 在内存泄漏等方面还可以吗

java - 通过使用 JMC 进行分析,获取挂钟时间方面的昂贵 Java 方法

php - symfony2 - 获取执行时间

c# - 如何在 Xamarin.Forms 中检测 Stacklayout 的左滑动和右滑动?

html - 将 XML 转换为 HTML

iOS AVCaptureVideoDataOutput 占用太多内存

c - 关于在 Objective-c 堆上分配 c 结构和数组所需的指南

ios - 如何将 2 个垂直堆叠的 UILabels 垂直居中

javascript - 在此 Windows 小工具中查找导致内存泄漏的原因

mysql - 有关 MySQL 中 last_query_cost 的更多信息?