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

我使用了来自Apple文档的AVPlayerDemo示例,并在其上面编写了我自己的UI来播放从UITableViewController中选择的video。 现在,问题是这里有一个我无法找到的内存泄漏。 问题是AVPlayer对象没有被解除分配,我猜这是因为每次按下后退按钮并选择要播放的新video时,应用程序消耗的总内存会大幅跳跃,如下所示:

视频第一次播放时,内存使用量为36.6MB

video第一次播放时,内存使用量为36.6MB,现在是第二次:

它已跃升至58.2MB

它已经跃升至58.2MB,并且每次我回去再播放video或不同的video时都会继续增加。

在此处输入图像描述

我曾尝试使用带泄漏的仪器,但尚未弄清楚它有什么问题。

下面是整个Controller文件代码 。

//编辑

-(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"); } 

问题出在idleTimer上。 当在idleTimer上调用invalidate方法时,它不会同步使计时器失效,而是等待下一个滴答(不确定,但确实等待一段时间),然后再使其失效。

现在,同时,idleTimer引用被设置为nil。 在计时器的下一个滴答声中,引用将丢失并且内存永远不会释放,并且引用一直传播到ViewController,并且不释放任何对象。

我和你有同样的问题,但我设法通过在viewDidDisappearviewDidDisappear来修复内存泄漏:

 self.avPlayer?.replaceCurrentItem(with: nil)