我的应用程序结合了视频序列,并根据情况将音乐添加到最后的序列中。添加音乐后,应用程序检查用户是否选择了一个视频进行介绍,然后将其合并到最终视频中。
在运行分析器时,当我第二次和第三次这样做时,我发现内存泄漏:
AVMutableComposition *composition = [AVMutableComposition composition];

当组合初始视频序列时,它不会显示内存泄漏。但是如果应用程序添加了音乐和介绍,它就会漏出内存。
当添加音乐时,我创建一个新的构图和一个新的添加介绍。这种情况不会发生在代码的同一部分。
是问题所在吗?我不能创建多个AVMutableComposition?我怎样才能摆脱这些内存泄漏呢?
发布于 2018-02-20 09:04:00
我没有找到一个完美的解决方案,但在应用程序的过程中,我通过一个单例程序将泄漏减少到了一个。
@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只会第一次泄漏。然后,我的应用程序在没有更多内存泄漏的情况下多次重用它。
发布于 2018-02-20 07:47:01
我也遇到了这个问题,但是我只对我的组合变量做了一个分配,如下所示:
AVMutableComposition* tSilencingComposition = [AVMutableComposition composition];我不再重复使用组合指针,而是将其赋值为零,并让ARC在应用程序过程中完成它的任务--但是每次我碰到这条线时,我都会收到泄漏报告。这似乎是AVMutableComposition中的一些东西。
仪器报告说,我在这个分配中泄漏了6个字节,而进一步的钻取产生了与那些FigXPC*调用相同的报告。
https://stackoverflow.com/questions/48806361
复制相似问题