iOS本地图片的加载方式非常灵活,适用不同的情况,在此记录一下.
一、Assets.xcassets
Assets.xcassets,属于管理图片的一个工程文件,内部可以创建图片集,icon集,启动图集等,能自动识别图片分辨率,使用的时候用imageNamed来获取图片,不能使用imageWithContentsOfFile。它是一个很好的图片管理文件,我们的一些小的icon或者图片可以放置进来,我们的启动图等在这里面管理还是比较方便,但是大量或者图片过大的话还是不建议使用。
UIImage *image = [UIImage imageNamed:@"drink_1.jpg"];
二、bundle文件
资源管理文件。右键添加file中,iOS-Resource 中的setting bundle进行创建。我们可以在这里放置大量的工程素材,方便统一查找和管理。同样可以把不同分辨率的图片素材都加进来。我们就可以用
NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.bundle/hotBagImage.png"];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
NSString *path = [[NSBundle mainBundle] pathForResource:@"drink_1" ofType:@"jpg"];
注意:有些文件如果在bundle下没有链接进去,是无法找到的
这种方式去获取到图片集合,不占用系统内存,大大节省了内存,起到了性能优化,缺点如果资源素材多,会增加包的体积,但这种一般不可避免
三、直接建立文件夹
这种方法建立的文件夹是蓝色的,不可以直接通过相对路径访问,要使用绝对路径
NSString *filePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"image/drink_1.png"];
UIImage *image = [UIImage imageWithContentsOfFile:filePath];
四、把文件夹放到项目下,直接拖进工程,要选Create groups.
这种方法建立的文件夹会变成黄色,编译时会把绝对路径转换成相对路径,可以直接访问,使用
UIImage *image = [UIImage imageNamed:@"drink_1.jpg"];
也可以使用
NSString *path = [[NSBundle mainBundle] pathForResource:@"drink_1" ofType:@"jpg"];