我的应用程序结合了视频序列,并根据情况将音乐添加到最终序列中。添加音乐后,该应用会检查用户是否选择了视频进行介绍,然后将其合并到最终视频中。
运行探查器时,我发现第二次和第三次执行此操作时发生内存泄漏:
AVMutableComposition *composition = [AVMutableComposition composition];
组合初始视频序列时,它不会显示内存泄漏。但如果应用程序添加音乐和介绍,它会泄漏内存。
添加音乐时,我会在添加简介时创建新的合成和新合成。它不会发生在代码的同一部分。
这是问题吗?我不能创建多个AVMutableComposition?我怎样才能摆脱这些内存泄漏?
答案 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将仅在第一次泄漏。然后,我的应用程序多次重复使用它,没有更多的内存泄漏。