美文网首页
UIImage imageWithContentsOfFile

UIImage imageWithContentsOfFile

作者: KB_MORE | 来源:发表于2021-08-11 11:40 被阅读0次

    1.图片加载

    1.1 imageNamed

    把image缓存内存里面,此方法在系统缓存中查找具有指定名称的图像对象,并返回最适合主屏幕的图像变体。如果匹配的图像对象尚未在缓存中,此方法将定位并从磁盘或可用资产目录加载图像数据,然后返回结果对象。

    系统可以在任何时候清除缓存的图像数据以释放内存。仅对缓存中但当前未使用的图像进行清除

    1.2. imageWithContentsOfFile

    imageWithContentsOfFile:initWithContentsOfFile:方法创建一个图像对象,其中初始数据不在包中。这些方法每次从磁盘加载图像数据,因此不应该使用它们重复加载相同的图像。

    2缓存

    2.1. 缓存加载方式(imageNamed) :

    使用imageNamed这个方法生成的UIImage对象,会在应用的bundle中寻找图片,如果找到则Cache系统缓存中,作为内存的cache,而程序员是无法操作cache的,只能由系统自动处理,如果我们需要重复加载一张图片,那这无疑是一种很好的方式,因为系统能很快的从内存的cache找到这张图片,但是试想,如果加载很多很大的图片的时候,内存消耗过大的时候,就会会强制释放内存,即会遇到内存警告(memory warnings).由于在iOS系统中释放图片的内存比较麻烦,所以容易产生内存泄露。

    总结下:
    使用imageNamed:
    图片资源反复使用到,如按钮背景图片的蓝色背景,这些图片要经常用到,而且占用内存少 button背景图片的蓝色背景。这些图片要常常常使用到,并且占用内存少

    不使用 imageNamed : 图片资源较大,加载到内存后,比较耗费内存资源 ,图片一般只使用一次
    (1)图片一般仅仅使用一次。如一些用户的照片资源,开屏
    (2)图片资源较大,载入到内存后,比较耗费内存资源

    2.2.非缓存加载方式 (imageWithContentsOfFile) :

    相比上面的imageNamed这个方法要写的代码多了几行,使用imageWithContentsOfFile的方式加载的图片,图片会被系统以数据的方式进行加载.返回的对象不会保存在缓存中,一旦对象销毁就会释放内存,所以一般不会因为加载图片的方法遇到内存问题.

    3.优缺点

    3.1 imageNamed 的缺点

    第一次读取的图片保存到缓冲区, 然后永不销毁. 如果这个图片过大, 占用几百 kb, 这一块的内存将不会释放, 必然导致内存的浪费, 而且这个浪费的周期与APP的生命周期同步.

    3.2 imageWithContentsOfFile 的缺点

    当我们需要图片的时候就会去沙盒中读取这个图片文件, 转换成UIImage对象来使用. 现在假设一种场景:
    image@2x.png 图片占用 5kb 的内存
    image@2x.png 在多个界面都用到, 且有7处会同时显示这个图片
    通过代码分析就可以知道 Resource 这个方式在这个情景下会占用 5kb/个 X 7个 = 35kb 内存. 然而, 在 ImageAssets方式下, 全部取自字典缓存中的UIImage, 无论有几处显示图片, 都只会占用 5kb/个 X 1个 = 5kb 内存. 此时 Resource 占用内存将会更大.

    相关文章

      网友评论

          本文标题:UIImage imageWithContentsOfFile

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