0

I am recording voice with AVAudioRecorder in parallel, i am running NStimer in interval of 1 second with a function is merging multiple images to one and adding the same into NSmutablearray to use these images for video(MP4) in future. But after 10 second it is giving receive memory leak warning and crashing every time. Please see below code for the same were i am wrong in any case.

This function is calling with NStimer in interval of 1 second.

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];
    }
    }
 }

Below Function is using to merge images where memory leak is occurring and application is crashing every time.

- (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];
 }

Could you please let help me out for this issue. I am using the ARC project but for this file i have disable ARC and make it Non-ARC. Please help me.

Thanks in advance.

gaurav
  • 357
  • 1
  • 4
  • 13
  • You create referenceView each time on entry to this method and add insert it into (I guess) the view managed by the current view controller. Later on you release it, but you never remove it as a subView. This is likely to crash and may well produce a memory leak. Why not remove it? – David Elliman Aug 08 '13 at 07:47
  • Hi David, I have removed referenceView and other imageviews initialization from this function to avoid every time initialization in viewDidLoad and remove every time from superview in this function. But it is still crashing. Please help. – gaurav Aug 08 '13 at 08:10

0 Answers0