zoukankan      html  css  js  c++  java
  • IOS 多于UIImageView 当加载较大的高清闪存管理

    当我们是一家人View  多于UIImageView,和UIImageView表明一个更大的HD,可能存在的存储器的警告的问题。假设第一次走进这个view,无记忆出现预警。当重新进入view,在那曾经的记忆不及时释放的假设。这是蓄积的经时,它可以导致内存破坏。


    1,UIImage 载入图片的方式。

          假设是本地图片,尽量不要使用 [UIImage  imageNamed:nil]; 这样的方式,假设使用这样的方式载入。仅仅要程序不退出,它便一直会在内存中。

         我们能够使用 :

                            NSString *path = [[NSBundlemainBundle]pathForResource:@'"图片的名字" ofType:@""];

                            UIImage *image = [UIImageimageWithContentsOfFile:path];


             那两者的优缺点就非常明显了,[UIImage  imageNamed:nil]; 仅仅需载入一次,它便在内存中,所以第二次载入速度非常快。而另外一种载入方式因为我们将它释放掉了,会再次载入。

    所以选用那种方式,依你情况而定。


    2,上面说的另外一种方式。尽管能够释放掉,但我们要告诉人家什么时候释放。也就是说,当前显示页面不是这个view时,我们便将它释放掉:

    - (void)viewWillDisappear:(BOOL)animated{

        [UIImageView removeFromSuperview];

        UiImageView = nil;

    }


    当然,当我们再次进入这个view时,便要将移除掉的view再次加入进来

    - (void)viewDidAppear:(BOOL)animated{

       [self addSubView:UIImageView];

    }


    3,上述两种方式。主要解决内存累加的问题。但假设第一次进入view。图片所有渲染在view上时。内存就崩溃了。

    那我们仅仅能在图片上做文章了。我们载入的高清大图假设差点儿相同都是3000*2000,也可能比这个还大,就算我们的程序是iPad App,iPad 4  的分辨率才多少。这些图远远大于设备的分辨率,全然是资源浪费,所以我们通常的一个做法,便是将这种图以小尺寸渲染到view上。


    推荐使用:

    UIImage+Resize.hUIImage+Resize.m
    Extends the UIImage class to support resizing (optionally preserving the original aspect ratio), cropping, and generating thumbnails.

    UIImage+RoundedCorner.hUIImage+RoundedCorner.m
    Extends the UIImage class to support adding rounded corners to an image.

    UIImage+Alpha.hUIImage+Alpha.m
    Extends the UIImage class with helper methods for working with alpha layers (transparencies).


    经常用法:

     UIImage *image 

     UIImage *thumbImage = [imagethumbnailImage:140// This should the size of the view in collection view. example: myCell width is 20 and height is 20.

                                          transparentBorder:0

                                              cornerRadius:0

                                       interpolationQuality:kCGInterpolationMedium];       //生成缩略图



                // this "resizedimage" image is what you want to pass to setImage

                UIImage * resizedImage = [imageresizedImage:imageview.frame.sizeinterpolationQuality: kCGInterpolationLow];   //生成你想要尺寸的图



        造成的问题,要注意缩放的比例,不要导致图片变形,因为尺寸缩小,可能会导致图片模糊,注意缩小的尺寸。



       综上可见。每种方法有长处,有缺点。主要根据自己的开发情况,用妥协。



    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    《棉花帝国:一部资本主义全球史》笔记
    关于”空杯之心“的重新思考
    《光荣与梦想:19321972年美国叙事史》笔记
    《哥伦布大交换:1492年以后的生物影响和文化冲击》笔记
    《增长、短缺与效率》笔记
    《逃不开的经济周期:历史、理论与投资现实》笔记
    《经济学》笔记
    《就业、利息和货币通论》笔记
    PostgreSQL与MySQL比较
    让svn自动更新代码注释中的版本号
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4731201.html
Copyright © 2011-2022 走看看