ios加载图片内存优化

以7张添加到bundle中的图片通过NSTimer每2s执行一次加载操作为例:
    图片加载方式(2种):
     (1)[UIImage imageNamed:图片名];
          实现过程:
          程序加载打包到手机上 == 手机存储空间
          程序刚开始运行      == 手机内存
          点击tom的某个动作按钮,通过[UIImage imageNamed:a]掉用bundel中的a图片 == 手机内存中运行的程序先从手机缓存中去找a图片,如果a不存在于缓存中,便到手机存储空间去找,然后加载,加载后将a图片存于缓存中,如果下次再用到a图片,便直接从缓存中去找(大量图片都用此方法加载,这些图片会一直存于缓存中只能通过系统释放内存,无法人为释放,长时间几类会造成崩溃)
     (2)[[UIImage alloc]initWithContentsOfFile:图片路径];
          实现过程:
          图片每次都从bundel中去加载,不会造成图片存于缓存中无法释放
          建议用此方法


用xcode得自带的检测工具对比两种加载图片内存的变化:

在当前工程下:Product ---> Profile ---> Allocations 

截图如下:

(1)[UIImage imageNamed:图片名];

   运行40s

     ios加载图片内存优化_第1张图片

   约20s后缓存变化

    ios加载图片内存优化_第2张图片

(2)[[UIImage alloc]initWithContentsOfFile:图片路径];

     运行40s左右:

     ios加载图片内存优化_第3张图片

   约20s后,缓存变化为

   ios加载图片内存优化_第4张图片

    第二种方式加载图片,内存几乎无变化

 此文仅以7张图片循环加载为例,如果用以上两种方式加载更多图片,内存差异必然会很明显,所以如果不是经常出现的图片建议还是用第二种方式加载

 两种加载方式比较最直观的体现是前14s内存的变化,第一种方式前14秒以台阶式上升变化,内存一直在上升,说明图片一直在往缓存里存储,而后第二遍轮播开始,缓存便无明显变化。第二种方式几乎从开始加载时,内存便一直是以直线形式循环加载的(当然偶尔出现一个高点的值,并在循环周期里固定时间出现是因为某张图片比其它图片大);


你可能感兴趣的:(ios加载图片内存优化)