0

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にしています。私を助けてください。

前もって感謝します。

4

0 に答える 0