以7张添加到bundle中的图片通过NSTimer每2s执行一次加载操作为例:
图片加载方式(2种):
(1)[UIImage imageNamed:图片名];
实现过程:
程序加载打包到手机上 == 手机存储空间
程序刚开始运行 == 手机内存
点击tom的某个动作按钮,通过[UIImage imageNamed:a]掉用bundel中的a图片 == 手机内存中运行的程序先从手机缓存中去找a图片,如果a不存在于缓存中,便到手机存储空间去找,然后加载,加载后将a图片存于缓存中,如果下次再用到a图片,便直接从缓存中去找(大量图片都用此方法加载,这些图片会一直存于缓存中只能通过系统释放内存,无法人为释放,长时间几类会造成崩溃)
(2)[[UIImage alloc]initWithContentsOfFile:图片路径];
实现过程:
图片每次都从bundel中去加载,不会造成图片存于缓存中无法释放
建议用此方法
图片加载方式(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
约20s后缓存变化
(2)[[UIImage alloc]initWithContentsOfFile:图片路径];
运行40s左右:
约20s后,缓存变化为
第二种方式加载图片,内存几乎无变化
此文仅以7张图片循环加载为例,如果用以上两种方式加载更多图片,内存差异必然会很明显,所以如果不是经常出现的图片建议还是用第二种方式加载
两种加载方式比较最直观的体现是前14s内存的变化,第一种方式前14秒以台阶式上升变化,内存一直在上升,说明图片一直在往缓存里存储,而后第二遍轮播开始,缓存便无明显变化。第二种方式几乎从开始加载时,内存便一直是以直线形式循环加载的(当然偶尔出现一个高点的值,并在循环周期里固定时间出现是因为某张图片比其它图片大);