zoukankan      html  css  js  c++  java
  • 在arc模式下 CGImage 释放问题

     //大图bigImage


        //定义myImageRect,截图的区域

        if (imagecount >= 3) {

            CGRect myImageRect;

            if (i.size.width<= i.size.height) {

                myImageRect = CGRectMake(0.0150.0, i.size.width, i.size.width);

            }

            else

                myImageRect = CGRectMake(0.0150.0, i.size.height, i.size.height);

            

            UIImage* bigImage= i;

            

            CGImageRef imageRef = bigImage.CGImage;

            

            CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);

            CGSize size;

            

            size.width = 80;

            

            size.height = 80;

            

            UIGraphicsBeginImageContext(size);

            

            CGContextRef context = UIGraphicsGetCurrentContext();

            

            CGContextDrawImage(context, myImageRect, subImageRef);

            

            UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];

            CGImageRelease(subImageRef);

            UIGraphicsEndImageContext();

            

            

            return smallImage;


        }

        

        if (imagecount < 3) {

            CGRect myImageRect;

            if (i.size.width<= i.size.height) {

                myImageRect = CGRectMake(0.0150.0, i.size.width, i.size.width*2/3);

            }

            else

                myImageRect = CGRectMake(0.0150.0, i.size.height, i.size.height*2/3);

            

            UIImage* bigImage= i;

            

            CGImageRef imageRef = bigImage.CGImage;

            

            CGImageRef subImageRef = CGImageCreateWithImageInRect(imageRef, myImageRect);

            CGSize size;

            

            size.width = 120;

            

            size.height = 80;

            

            UIGraphicsBeginImageContext(size);

            

            CGContextRef context = UIGraphicsGetCurrentContext();

            

            CGContextDrawImage(context, myImageRect, subImageRef);

            

            UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];   //注意蓝色的部分

            CGImageRelease(subImageRef);


            

            

            return smallImage;

            

        }

        return nil;

       

    }



    像这样 裁剪图片 就会有内存泄漏 

    后来上 stackoverflow 查找 发现这样一段话

    ARC does not manage C-types, of which CGImage may be considered. You must release the ref manually when you are finished with CGImageRelease(image);


       UIImage* smallImage = [UIImage imageWithCGImage:subImageRef];

            CGImageRelease(subImageRef);

            UIGraphicsEndImageContext();

    也就是 在arc模式下 不是什么东西 都可以释放 例如 C-types的对象 都需要手动来进行释放 
  • 相关阅读:
    诊断
    HIS内号码说明
    ASP.NET Page life cycle
    ASP.NET Simple page life cycle
    java多线程
    ibatis sqlmap
    cglib和asm
    利用ant编译maven项目
    Spring Cache与Tair结合
    USACO 1.2 MILKING COWS
  • 原文地址:https://www.cnblogs.com/melons/p/5791963.html
Copyright © 2011-2022 走看看