imageNamed:
a.只需传入文件名.扩展名(可选)即可,会缓存数据,相同的图片,不会重新加载
b.就算指向它的指针被销毁,该资源也不会被从内存中干掉
c.加载到内存中后,占据内存空间较大,占用的内存归系统管理,我们无法管理
d. 放到Assets.xcassets的图片,默认就有缓存,图片被压缩
imageWithContentsOfFile:
a.必须传入文件的全名(全路径+文件名),不缓存数据,相同的图片会被重复加载到内存中
b.对象销毁的时候,加载到内存中得图片会被一起销毁
c. 放到项目main bundle中的图片默认不缓存,图片没有被压缩
d.不能加载Assets.xcassets中的图片,获取不到路径
结论:
(1)用imageNamed的方式加载时,系统会把图像缓存到内存,如果图片较小,并且频繁使用的图片,使用imageNamed来加载图片(按钮图片/主页图片/占位图)。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存,而且释放图像的内存是一件相对来说比较麻烦的事情。对于同一个图像系统只会把它缓存到内存一次,这对于图像的重复利用是非常有优势的。
(2)用imageWithContentsOfFile方式加载时,图像会被系统以数据方式加载到程序,如果图片较大,并且使用次数较少,使用 imageWithContentsOfFile来加载(相册/版本新特性)。当你不需要重用该图像,或者你需要将图像以数据方式存储到数据库,又或者你要通过网络下载一个很大的图像时,请尽量使用imageWithData的方式加载图像。
小知识:Assets.xcassets
Assets.xcassets在app打包后,以Assets.car文件的形式出现在bundle中。其作用在于:
1.自动管理图片,自动识别@2x,@3x图片
2.管理应用的AppIcon和LaunchImage图片
3.可以对图片进行剪裁和拉伸处理(Slicing)
4.其中的图片资源只能通过imageNamed方法加载,通过NSBundle的pathForResource:ofType:无法获得图片路径
5.适合存放系统常用的,占用内存小的图片资源
6.在Assets.xcassets中添加颜色
7.在Assets.xcassets中使用矢量图
网友评论