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

iOS内存泄漏,AVPlayer永远不会被释放,第1张

概述我使用了 Apple docs的AVPlayerDemo样本,并在自己的界面上写了自己的UI,播放从UITableViewController中选择的视频.现在,问题是这里有一个内存泄漏,我无法找到.问题是,AVPlayer对象没有被处理,我猜这是因为每次按下按钮并选择一个新的视频播放,这个应用程序消耗的总内存有一个巨大的跳跃,显示在这里: 第一次视频是播放器,内存使用量是36.6MB,现在是第二 我使用了 Apple docs的AVPlayerDemo样本,并在自己的界面上写了自己的UI,播放从UItableVIEwController中选择的视频.现在,问题是这里有一个内存泄漏,我无法找到.问题是,AVPlayer对象没有被处理,我猜这是因为每次按下按钮并选择一个新的视频播放,这个应用程序消耗的总内存有一个巨大的跳跃,显示在这里:

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

在这里,它已经跳到了58.2MB,并且每次回去再播放视频或者播放不同的视频时,它都会不断增加.

我试过使用仪器与泄漏,但还没有能够弄清楚它有什么问题.

整个控制器文件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");}
解决方法 问题在于IDleTimer.当在IDleTimer上调用invalIDate方法时,它不会同步使定时器无效,而是等待下一个tick(不确定但是等待一段时间),然后才能使其释放.

现在,同时,IDleTimer引用被设置为nil.在定时器的下一个勾号上,引用丢失,内存永远不会被释放,引用传播一直到VIEwController,它的对象都不会被释放.

总结

以上是内存溢出为你收集整理的iOS内存泄漏,AVPlayer永远不会被释放全部内容,希望文章能够帮你解决iOS内存泄漏,AVPlayer永远不会被释放所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1098008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存