使用Bundle存储获取图片

一、制作bundle文件

1.创建一个文件夹,把要用的图片放入文件夹,并命名为*.bundle

2.把.bundle文件拖入工程中

二、使用图片

初始化一个ImageView

UIImageView *myImage=[[UIImageView alloc]initWithFrame:CGRectMake(50, 400, 100, 100)];

[self.view addSubview:myImage];

获取图片

NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"Picture.bundle"];

NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];

UIImage *(^getBundleImage)(NSString *) = ^( NSString *nm) {

return [UIImage imageWithContentsOfFile:[ bundle pathForResource:nm ofType:@"jpg"]];

};

myImage.image = getBundleImage(@"555");

获取@2x或@3x图片

myImage.image = getBundleImage(@"555@2x");

myImage.image = getBundleImage(@"555@3x");

注意:当同时存储555 和@2x @3x图片时,如果不写@2x或@3x会默认选择@3x的图片赋值给myImageview。

三、为方便使用,把写如下方法在新类中,使用时调用此类。

ImagePic.m文件中方法

+(UIImage *)imagesNamedFromCustomBundle:(NSString *)imgName

{

NSString *bundlePath = [[NSBundle mainBundle].resourcePath stringByAppendingPathComponent:@"Picture.bundle"];

NSBundle *bundle = [NSBundle bundleWithPath:bundlePath];

NSString *img_path = [bundle pathForResource: imgName ofType:@"jpg"];

return [UIImage imageWithContentsOfFile:img_path];

}

调用

myImage.image = [ImagePic imagesNamedFromCustomBundle: @"555"];


简单理解,Bundle文件就是资源文件包。我们将许多图片、XIB、文本文件组织在一起,打包成一个Bundle文件。方便在其他项目中引用包内的资源。

Bundle是静态的,也就是说,我们包含到包中的资源文件作为一个资源包是不参加项目编译的。也就意味着,bundle包中不能包含可执行的文件。它仅仅是作为资源,被解析成为特定的2进制数据。

引用自:http://blog.sina.com.cn/s/blog_7b9d64af0101jmj2.html

imageName的方式会在使用的时候系统会cache,程序员是无法处理cache的,这是由系统自动处理的,对于重复加载的图像,速度会提升很多,这样反而用户体验好。所以如果某张图片需要在应用中使用多次,或者重复引用,使用imageName的方式会更好

imageWithContentsOfFile的方式,在使用完成之后系统会释放,不会缓存下来,所以也就没有这样的问题。一般也不会把所有的图片都会缓存。有些图片在应用中只使用一两次的,就可以用这样的方式,比如新手引导界面的图片等等,就适合这样的方式。没有明显的界限。

引用自:http://www.cnblogs.com/easonoutlook/archive/2012/12/17/2821648.html 

所以,当使用的图片不是经常使用的,可以放到bundle文件中,经常用的图片用[UIImage imageNamed:@"55"];这种方式获取比较好。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容