UIImage加载图片的两种方式
imageNamed:和imageWithContentsOfFile:
图片位置
- imageNamed:可以加载Assets.xcassets文件夹中的图片(Assets.xcassets只能通过imageNamed:加载),也可以加载根目录中的图片
- imageWithContentsOfFile:加载根目录中的图片
```objectivec
// 001在根目录中,002在Assets.xcassets文件夹中
// imageName、imageName2都不为nil
UIImage *imageName = [UIImage imageNamed:@"001"];
UIImage *imageName2 = [UIImage imageNamed:@"002"];
// imageFile不为nil,imageFile2为nil
UIImage *imageFile = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"001" ofType:@"png"]];
UIImage *imageFile2 = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"002" ofType:@"png"]];
```
内存和程序性能方面
- imageNamed:这个方式用一个指定的名字在系统缓存中查找如果存在的话返回一个图片对象,如果不存在的话从指定的文档中加载然后缓存并返回一个对象。加载的图片使用完成后,不会被立即释放掉,只有在 APP收到didReceiveMemoryWarning时候系统才会回收这部分缓存。适用于图片小,数量少且经常使用的情况。
- imageWithContentsOfFile:图片会被系统以数据的方式进行加载,返回的对象不会保存在缓存中,一旦对象销毁就就会释放内存。一般不会因为加载图片的方式遇到内存问题。适用于图片大以及使用较少的情况。
打包方式不同
- 拖入Assets.xcassets文件夹中的图片会被打包成Assets.car文件,不能根据路径读取图片,得到一定程度上的保护防止被导图
- Supporting Files文件夹中的图片则直接暴露在外面