iOS中UIImage的注意事项

作者: 胖绵羊 | 来源:发表于2016-08-03 23:57 被阅读0次

    简书上的文章已经不再维护,有兴趣阅读其他文章,或一起交流的朋友,请移步 我的博客:punmy.cn

    原文


    • 加载
      • 谨慎使用[UIImage imageNamed:],imageNamed会做缓存,一般用于加载app生命周期内频繁被使用的图片和UI资源,有助于加快加载速度。而对于一次性使用的UI资源、尺寸过大的图片,不建议使用。

      • 对于一次性使用、尺寸较大的图片资源,可以通过路径的方式创建UIImage:
        NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"image_mic" ofType:@"png"];
        [UIImage imageWithContentsOfFile:imagePath];

      • imageNamed缓存过的图片,如果有指向其CGImage的CGImageRef,不能随意释放,一旦释放,后续再次使用imageNamed创建图片,就会得到野指针。更有甚者,可能导致内存疯狂暴增,使整个iOS系统瘫痪。(iPod touch 5 - iOS 8.0执行如下代码时秒崩,只能通过重启来恢复)
        UIImage superImage = [UIImage imageNamed:@"image_mic.png"];
        CGImageRef imageRef = superImage.CGImage;
        /
        * 做一些操作。。。 */
        //相当于释放掉了UIImage的缓存
        CGImageRelease(imageRef);

          //再次创建UIImage,得到野指针(在此处概率性崩溃)
          UIImage *superImage = [UIImage imageNamed:@"image_mic.png"];
          //再次引用野指针
          CGImageRef imageRef = superImage.CGImage;
          //对野指针进行释放操作,内存泄漏,重复几次后iPod touch 5 系统崩溃
          CGImageRelease(imageRef); // bomb!!!
        
    • 图片方向
      • 部分加载的图片附带Exif信息,需要注意在处理之前进行方向矫正,否则在处理后可能会图片数据错误,如图片方向总是颠倒。
    • 图片保存
      • 将图片保存到相册,通过UIImage格式保存,系统在编码成JPEG格式存在压缩,对于反复处理反复保存同一张图片会造成图片质量变差出现问题。务必保存的时候手动编码格式,并把质量设置为最大值。

    相关文章

      网友评论

        本文标题:iOS中UIImage的注意事项

        本文链接:https://www.haomeiwen.com/subject/mwkcsttx.html