AVAudioRecorder で並行して音声を録音しています。複数の画像を 1 つにマージし、NSmutablearray に同じものを追加して、将来これらの画像をビデオ (MP4) に使用する関数を使用して、1 秒間隔で NStimer を実行しています。しかし、10 秒後に受信メモリ リークの警告が表示され、毎回クラッシュします。いずれにせよ、私が間違っている場合は、以下のコードを参照してください。
この関数は NStimer で 1 秒間隔で呼び出しています。
NSTimer *movementTimer=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(changingSmiles) userInfo:nil repeats:YES];
-(void)changingSmiles{
[recorder updateMeters];
const double ALPHA = 0.05;
float lowPassResults=0.0;
double peakPowerForChannel = pow(10, (0.05 * [recorder peakPowerForChannel:0]));
lowPassResults = ALPHA * peakPowerForChannel + (1.0 - ALPHA) * lowPassResults;
float voiceLevel = [recorder peakPowerForChannel:0];
[voiceNotesArray addObject:[NSString stringWithFormat:@"%f",voiceLevel]];
if(lowPassResults>0.0){
if (lowPassResults<=0.002018) {
smileView.image = [smileArr objectAtIndex:2];
UIImage *image = [self mergeImage:imagefirst:centerView.image:thirdImage];
[self.imagesArray addObject:image];
}
}
}
以下の関数は、メモリリークが発生し、アプリケーションが毎回クラッシュしている画像をマージするために使用しています。
- (UIImage*)mergeImage:(UIImage *)first:(UIImage *)second:(UIImage *)third
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
referenceView.frame = CGRectMake(0, 0, 1024, 768);
referenceView.hidden = NO;
[self.view insertSubview:referenceView belowSubview:selfView];
imgView1.image = first;
imgView2.image = baseview.image;
imgView3.image = second;
imgView4.image = third;
imgView1.frame = selfView.frame;
imgView2.frame = self.view.bounds;
imgView3.frame = centerView.frame;
imgView4.frame = smileView.frame;
[referenceView addSubview:imgView1];
[referenceView addSubview:imgView2];
[referenceView addSubview:imgView3];
[referenceView addSubview:imgView4];
UIImage *finalImage = nil;
UIGraphicsBeginImageContext(referenceView.bounds.size);
[referenceView.layer renderInContext:UIGraphicsGetCurrentContext()];
finalImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
[referenceView removeFromSuperview];
[imgView1 removeFromSuperview];
[imgView2 removeFromSuperview];
[imgView3 removeFromSuperview];
[imgView4 removeFromSuperview];
//CGImageRelease(finalImage.CGImage);
return finalImage;
[pool drain];
}
この問題について私を助けてください。私はARCプロジェクトを使用していますが、このファイルではARCを無効にして非ARCにしています。私を助けてください。
前もって感謝します。