1

4 つの画像をマージして 1 つの uiimage にしようとしています。しかし、CFRelease を実行しようとすると、クラッシュします。これを行わないと、メモリ リークが発生してクラッシュします。これはどのように解決できますか?

私のコードについては以下を参照してください。

    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 に送信されたメッセージ

4

1 に答える 1

1

UIGraphicsGetImageFromCurrentImageContext()CGImageRef ではなく、UIImage * を返します。また、結果の UIImage を所有していないため、それを解放したくない (または CFRelease()) ことはありません。

試す:

UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();

代わりは。

于 2013-08-12T19:25:43.523 に答える