1

I am trying to merge four images to make it one uiimage. But when I am going to do CFRelease, it is crashing. If I don't do this, then it is giving a memory leak and crashing. How could this be resolved?

See below for my code.

    referenceView.frame = CGRectMake(0, 0, 1024, 768);
    referenceView.hidden = NO;

    [self.view insertSubview:referenceView belowSubview:selfView];

    imgView1.image = delegate.imageCroped;
    imgView2.image = [UIImage imageNamed:@"videobg.png"];
    imgView3.image = [UIImage imageNamed:@"videochar.png"];;
    imgView4.image = smileView.image;

    imgView1.frame = CGRectMake(456, 311, delegate.imageCroped.size.width-30.8, delegate.imageCroped.size.height-40);
    imgView2.frame = CGRectMake(0, 0, 1024, 768);
    imgView3.frame = CGRectMake(392, 187, imgView3.image.size.width, imgView3.image.size.height);
    imgView4.frame = CGRectMake((smileView.frame.origin.x-((smileView.frame.origin.x > 530) ?    30  : 15)), (smileView.frame.origin.y+((smileView.frame.origin.y <= 307) ?    95  : 50)), smileView.frame.size.width, smileView.frame.size.height);

    [referenceView addSubview:imgView1];
    [referenceView addSubview:imgView2];
    [referenceView addSubview:imgView3];
    [referenceView addSubview:imgView4];

    UIGraphicsBeginImageContext(referenceView.bounds.size);
    [referenceView.layer renderInContext:UIGraphicsGetCurrentContext()];
    CGImageRef finalImage = ( CGImageRef)(UIGraphicsGetImageFromCurrentImageContext());
    UIGraphicsEndImageContext();

    [referenceView removeFromSuperview];
    [imgView1 removeFromSuperview];
    [imgView2 removeFromSuperview];
    [imgView3 removeFromSuperview];
    [imgView4 removeFromSuperview];

    UIImage *resizedImage = [UIImage imageWithCGImage:finalImage];

    CFRelease(finalImage);

    return resizedImage;

}
@catch (NSException *exception) {

}

And I am getting the below error. How can I fix this problem? My project is in ARC.

* -[UIImage _cfTypeID]: message sent to deallocated instance 0x1e88dce0

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
gaurav
  • 357
  • 1
  • 4
  • 13

1 Answers1

1

UIGraphicsGetImageFromCurrentImageContext() returns a UIImage *, not a CGImageRef. And you don't own the resulting UIImage, so you don't want to release it (or CFRelease() it).

try:

UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();

instead.

Jeff Loughlin
  • 4,134
  • 2
  • 30
  • 47
  • Yes, i tried the same and it is giving crash in between of running loop. The crash log showing "Receiving Memory Leak". Please help. – gaurav Aug 13 '13 at 04:54
  • Need more information then - if you've changed the code as suggested and you are crashing, then something else is wrong. – Jeff Loughlin Aug 13 '13 at 12:34