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的对象 都需要手动来进行释放 
  • 相关阅读:
    hdu 1016 Prime Ring Problem (dfs)
    微信小程序尝鲜一个月现状分析
    创新大师Steve Blank: 你真的知道什么是真正的精益创业吗?
    android studio 开发经常使用快捷键使用分享
    LeetCode:Partition List
    2016 博客导读总结 &amp; 个人感悟
    poj
    Android开之在非UI线程中更新UI
    浅谈数据库生命周期
    从AdventureWorks学习数据库建模——保留历史数据
  • 原文地址:https://www.cnblogs.com/melons/p/5791963.html
Copyright © 2011-2022 走看看