AVMutableComposition内存泄漏

时间:2018-02-15 11:39:24

标签: ios objective-c memory-leaks

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

运行探查器时,我发现第二次和第三次执行此操作时发生内存泄漏:

AVMutableComposition *composition = [AVMutableComposition composition];

enter image description here

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

添加音乐时,我会在添加简介时创建新的合成和新合成。它不会发生在代码的同一部分。

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

2 个答案:

答案 0 :(得分:0)

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

    AVMutableComposition* tSilencingComposition = [AVMutableComposition composition];

我不再重复使用合成指针,而是将其分配给nil并让ARC在应用程序中执行其操作 - 但每次我点击此行时,都会报告泄漏。它似乎是AVMutableComposition中的东西。

仪器报告我在此分配中泄漏了6个字节,并且进一步向下钻取会围绕这些FigXPC *调用生成相同的报告。

答案 1 :(得分:0)

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

@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将仅在第一次泄漏。然后,我的应用程序多次重复使用它,没有更多的内存泄漏。