1

Я пытаюсь объединить четыре изображения, чтобы сделать его одним uiimage. Но когда я собираюсь делать CFRelease, он рушится. Если я этого не сделаю, это приведет к утечке памяти и сбою. Как это можно решить?CFRelease, вызывающий крах в приложении iPad

См. Ниже мой код.

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) { 

} 

И я получаю следующую ошибку. Как я могу исправить эту проблему? Мой проект находится в ARC.

* - [UIImage _cfTypeID]: сообщение, отправленное высвобождены например 0x1e88dce0

ответ

1

UIGraphicsGetImageFromCurrentImageContext() возвращает UIImage *, а не CGImageRef. И у вас нет собственного UIImage, поэтому вы не хотите его выпускать (или CFRelease()).

попробовать:

UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext(); 

вместо этого.

+0

Да, я пробовал то же самое, и он дает краху между бегущей петлей. Журнал сбоев, показывающий «Утечка памяти приема». Пожалуйста помоги. – gaurav

+0

Нужна дополнительная информация: если вы изменили код, как было предложено, и вы рухнули, тогда что-то еще не так. –