【IOS】UIImage imageNamed方法的误用

2018-09-07  本文已影响0人  程序猿李墨

imageWithName与imageWithContentsOfFile

一  图片加载有以下两种方式:

+(UIImage*)imageNamed:(NSString*)name  

+(UIImage*)imageWithContentsOfFile:(NSString*)name

两种方式有何区别,在查阅官方文档后发现以下解释:

imageNamed:在加载图片时会根据名字在主目录中查找,首先会在内存缓存中查找,如果没有再从磁盘获取,之后系统会缓存该图片到内存。

如果使用频率较低的图片,或者想要保证图片不会增加内存占用,可以改用imageWithContentsOfFile:。该函数系统不会自动缓存。

举个例子界面A有5张图片,界面B有5张图片,用户从A到B再回到A之后,imageNamed:加载方式会产生10张图的缓存,但是imageWithContentsOfFile:在退出B时清理掉B的图片缓存,回到A时只有5张图片的缓存。

imageNamed

优点:

1. 系统自带缓存机制

2. 频繁使用加载速度快

缺点:

1. 内存占用增加

2. 缓存由系统控制,不可控

imageWithContentsOfFIle

优点:

1. 内存释放时机可控

2. 内存占用少

缺点:

1. 加载速度稍慢

2. 没有缓存机制,需要自己实现

综上所述,如果加载较大图片,或者不常用页面的图片时,可以使用imageWithContentsOfFile:,这样可以避免由于图片缓存导致APP内存占用过大;在一些常用页面的一些常用图片,为了提高加载速度,可以考虑使用imageNamed:,但是用imageNamed:加载图片会导致内存占用的不可控制,系统自己的缓存不能用代码控制去清理。因此还是建议主要使用imageWithContentsOfFIle:的方式加载图片,特别是一些较大的图。

【IOS】UIImage imageNamed方法的误用

二、非缓存的加载方式

+(UIImage *)imageWithContentsOfFile:(NSString *)path

+(UIImage *)imageWithData:(NSData *)data

三、何时使用imageNamed方法

1、采用imageNamed方法的图片加载情况

图片资源反复使用到,如按钮背景图片的蓝色背景,这些图片要经常用到,而且占用内存少

2、不应该采用的情况:

(1)图片一般只使用一次,如一些用户的照片资源

(2)图片资源较大,加载到内存后,比较耗费内存资源

上一篇下一篇

猜你喜欢

热点阅读