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

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

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

我曾尝试使用带泄漏的仪器,但尚未弄清楚它有什么问题.
下面是整个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");
}
Run Code Online (Sandbox Code Playgroud)
Tho*_*sen 14
我和你有同样的问题,但我设法通过调用它来修复内存泄漏viewDidDisappear:
self.avPlayer?.replaceCurrentItem(with: nil)
Run Code Online (Sandbox Code Playgroud)
问题出在idleTimer 上。当在idleTimer上调用invalidate方法时,它不会同步使计时器无效,而是等待下一个tick(不确定,但确实会等待一段时间),然后再使其无效并释放。
现在,与此同时,idleTimer 引用被设置为 nil。在计时器的下一个滴答声中,引用将丢失,并且内存永远不会释放,并且引用一直传播到 ViewController,并且它的任何对象都不会被释放。
| 归档时间: |
|
| 查看次数: |
4097 次 |
| 最近记录: |