Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS内存泄漏,AVPlayer永远不会释放_Ios_Memory Leaks_Profiling_Instruments_Avplayer - Fatal编程技术网

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

iOS内存泄漏,AVPlayer永远不会释放,ios,memory-leaks,profiling,instruments,avplayer,Ios,Memory Leaks,Profiling,Instruments,Avplayer,我使用的是来自的AVPlayerDemo示例,并在其上编写了自己的UI来播放从UITableViewController中选择的视频。现在,问题是这里的某个地方有内存泄漏,我找不到。问题是AVPlayer对象没有被解除分配,我猜这是因为每次按下后退按钮并选择一个新视频播放时,应用程序消耗的总内存都会大幅增加,如下所示: 第一次播放视频时,内存使用量为36.6MB,现在是第二次: 在这里,它已经跃升到58.2MB,并且每次我返回并再次播放视频或其他视频时,它都会继续增加 我试过使用有泄漏的仪

我使用的是来自的AVPlayerDemo示例,并在其上编写了自己的UI来播放从UITableViewController中选择的视频。现在,问题是这里的某个地方有内存泄漏,我找不到。问题是AVPlayer对象没有被解除分配,我猜这是因为每次按下后退按钮并选择一个新视频播放时,应用程序消耗的总内存都会大幅增加,如下所示:

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

在这里,它已经跃升到58.2MB,并且每次我返回并再次播放视频或其他视频时,它都会继续增加

我试过使用有泄漏的仪器,但还没能找出它有什么问题

这是整个控制器文件

//编辑

-(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上调用invalidate方法时,它不会同步使计时器无效,而是等待下一个滴答声(不确定,但会等待一段时间),然后使其无效并释放


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

我和您有相同的问题,但我通过调用
ViewDidEnglish
解决了内存泄漏问题:

self.avPlayer?.replaceCurrentItem(with: nil)

很抱歉,没有人会对您的整个文件进行筛选…您需要通过调试更多文件来缩小范围(例如,禁用某些功能并重试,或使用instruments中的分配视图来确定保留文件的位置等),我知道,我只是添加了全部内容,这样我就不会遗漏任何可能导致泄漏的内容。。我会复制相关代码并粘贴到这里。@FarazHassan你们试过向苹果公司报告罚单吗?@CAMOBAP很抱歉,我从来并没有发布过这个问题的答案。我解决了这个问题,它与AVPlayer本身无关。现在就发。请查收,谢谢。这解决了我的问题。非常感谢你在这里发帖。