iOS----使用CGImageRelease造成应用崩溃

//绘图

-(UIImage*)drawImageWithFartherImage:(UIImage*)fImage andChirdImage:(UIImage*)cImage{


    CGImageRefimgRef =fImage.CGImage;


    size_timgWidth =CGImageGetWidth(imgRef);

    size_timgHeight =CGImageGetHeight(imgRef);


    CGSizemsize =CGSizeMake(imgWidth, imgHeight);


    //绘制图片的大小

    UIGraphicsBeginImageContext(msize);

    //绘制父本图片

    [fImagedrawInRect:CGRectMake(0.0f,0.0f,msize.width,msize.height)];

    //绘制子图片(logo)

    [cImagedrawInRect:CGRectMake(0,0, msize.width,msize.height*0.8)];

    //合成结果

    UIImage *resultImage =UIGraphicsGetImageFromCurrentImageContext();

    //绘制完成

//    CGImageRelease(imgRef);//不需要释放,在这里如果释放了,会造成崩溃

    UIGraphicsEndImageContext();


    returnresultImage;

}

在CFRelease的解释中,提到要release的对象不能是NULL,若是NULL的话,会引起runtime的错误并且程序将要crash。加之在网上找到的另一种解释是,使用release后,程序并非直接就release了对象,一般都是有延迟的,所以我在第一次调用时表面上是正常的,但到第二次时就崩溃了,可见这个崩溃实际上是第一次的延迟释放对象造成的。而更直接的原因在于CGImageRef对象没有使用creat 或retain ,所以这个CGImageRef对象的内存管理就不需要手动处理了,系统会进行自动的释放,只有当CGImageRef使用creat或retain后才要手动release。去掉CGImageRelease(imageRef)后程序运行正常。

你可能感兴趣的:(iOS----使用CGImageRelease造成应用崩溃)