【问题标题】:AVMutableComposition memory leakAVMutableComposition 内存泄漏
【发布时间】:2018-02-15 11:39:24
【问题描述】:

我的应用程序结合了视频序列,并根据情况将音乐添加到最终序列中。添加音乐后,该应用会检查用户是否选择了一个视频作为介绍,然后将其合并为最终视频。

在运行分析器时,我在第二次和第三次执行此操作时发现内存泄漏:

AVMutableComposition *composition = [AVMutableComposition composition];

在组合初始视频序列时,它不会显示内存泄漏。但如果应用添加音乐和介绍,它会泄漏内存。

添加音乐时,我会创建一个新乐曲,并在添加前奏时创建一个新乐曲。它不会发生在代码的同一部分。

这是问题吗?我不能创建多个 AVMutableComposition?我怎样才能摆脱这些内存泄漏?

【问题讨论】:

    标签: ios objective-c memory-leaks


    【解决方案1】:

    我也遇到过这个问题,但我只对我的组合变量进行了一次赋值,如下所示:

        AVMutableComposition* tSilencingComposition = [AVMutableComposition composition];
    

    我不再重复使用组合指针,而是将其分配给 nil 并让 ARC 在应用程序的过程中完成它的工作 - 但每次我点击这条线时,我都会收到泄漏报告。它似乎是 AVMutableComposition 中的东西。

    仪器报告我在此分配中泄漏了 6 个字节,进一步深入研究会围绕这些 FigXPC* 调用产生相同的报告..

    【讨论】:

    • 感谢您的回答。我也没有找到解决方案。但是通过做一个单例,我将泄漏减少到只有一个。请参阅我自己的答案。
    【解决方案2】:

    我没有找到完美的解决方案,但在应用程序的过程中通过做一个单例将泄漏减少到只有一个。

    @property (strong, nonatomic) AVMutableComposition *composition;
    
    static FBVideoEditor *instance = nil;
    
    + (FBVideoEditor*) shared {
        if (instance == nil) {
            instance = [[FBVideoEditor alloc] init];
        }
        return instance;
    }
    
    - (AVMutableComposition*) getComposition {
        if (_composition == nil) {
            _composition = [AVMutableComposition composition];
        }
        for (AVMutableCompositionTrack *track in [_composition tracks]) {
            [_composition removeTrack:track];
        }
        return _composition;
    }
    

    通过这样做,AVMutableComposition 只会在第一次泄漏。然后,我的应用会多次重复使用它,而不会出现更多内存泄漏。

    【讨论】:

    • 我基本上在做同样的事情,但是内存泄漏导致我的调试流程中的其他地方出现问题(无法释放内存泄漏) - 我的调查到目前为止让我得出结论,这是AVFoundation 框架中的漏洞,我们将不得不等待 Apple 解决它 - 顺便说一句,这是在 iOS 11.2.5 上,不确定今天的版本是否修复它..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    • 2013-06-24
    • 2011-03-22
    相关资源
    最近更新 更多