一、bundle(资源包)
bundle可以理解为一个捆绑包,个人理解bundle为一个独立的空间,而我们的可执行(executable)工程,打包完之后,也是一个捆绑包,我们称之为主bundle,这个主bundle包含了可执行代码、图片资源、nib、Info.plist、语言本地化文件等相关资源。我们可以通过[[NSBundle mainBundle]pathForResource:@"" ofType:@""]直接访问到。
二、资源的引用方式
1.Copy items if needed
复制文件到项目中,如果不勾选,将只是引用文件地址,实际上文件是不在项目中的。
3.Added folders
a、如果复制整个文件夹到项目中,如果勾选了Create groups,打包添加到资源包过程中,只是将文件夹下的文件打包到资源包中,文件夹会被忽略,在工程中显示的是虚拟文件夹(黄色的),使用时可以直接引用文件就行。
b、如果勾选了Create folder references,打包添加到资源包过程中,将文件夹及文件下的文件一起打包到资源中,在工程中显示的是真实文件夹(蓝色的),访问其文件夹下的资源需要通过获取全路径。
2.Add to targets
添加文件到资源包中,如果不勾选,复制的文件将不会放在Bundle中。这样以后引用文件将找不到文件。
三、imageview的初始化方式
//01 * 默认尺寸就是图片的尺寸,位置默认从(0,0)开始
- (instancetype)initWithImage:(nullable UIImage *)image
//02 初始化后并给image赋值
- (instancetype)init;
imageview=[[UIImageView alloc]init];
imageview.image=[UIImage imageNamed:@""];
imageview.frame=CGRectMake(100, 100, 100, 100);
四、contentmodle控制图片的显示
contentmodle内容填充模式是所有View共有的属性,default is UIViewContentModeScaleToFill,但一般用来控制图片如何显示。
1、UIViewContentModeScaleToFill将图片拉伸整个imageview,图片显示的尺寸和imageview的尺寸是一样的;
2、UIViewContentModeScaleAspectFit,按照宽高比拉伸保证刚好看到图片的全部;
3、UIViewContentModeScaleAspectFill,按照宽高比拉伸,拉伸至图片的宽度或者高度跟imageview一样,有可能图片会超出imageview的大小范围,需设置clipsToBounds=YES剪掉超出边框的部分。
/Users/reitaketachibana/Desktop/xib 4、带有scale单词的,图片有可能被拉伸;不带有scale单词的,图片绝对不会被拉伸,保持
五、 imageview的加载图片方式内存分析
1.[UIImage imageNamed:@""];使用系统这种方式加载图片后,系统会将图片缓存到内存中,即使对应的image指针销毁了,也不会释放,其造成不可控很容易造成内存飙升,但好处是下次访问图片就直接从内存里读取,不需要再从文件中读取加快了访问速度。
2.[UIImage imageWithContentsOfFile:@“”]使用完成之后系统会释放,不会缓存下来,因此并不会添加内存负担.
3.放到Image.xcassets中的图片只能通过图片名去加载,苹果会压缩图片,而且默认带有缓存
使用选择:1.如果图片比较小经常,使用[UIImage imageNamed:@""]读取的时候就比较快。
2.图片比较大,使用频率比较低,使用[UIImage imageWithContentsOfFile:@“”]比较好。
3.图片比较大,使用频率比较低,不需要缓存的图片就不能放在Images.xcassets。
网友评论