我使用了 Apple docs 中的 AVPlayerDemo 示例并在其上编写了我自己的 UI 来播放从 UITableViewController 中选择的视频。现在,问题是这里某处存在内存泄漏,我无法找到。问题是 AVPlayer 对象没有被释放,我猜这是因为每次按下后退按钮并选择要播放的新视频时,应用程序消耗的总内存都会出现巨大的跳跃,如下所示:
视频第一次播放,内存占用36.6MB,现在播放第二次:
这里它已跃升至 58.2MB,并且每次我返回并再次播放视频或播放不同的视频时,它都会不断增加。
我试过使用 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/