iOS 图片资源放在 Images.xcassets 和单独文件夹的区别,通过 imageNamed 和imageWithContentsOfFile 加载的区别
一、iOS 图片资源放在 Images.xcassets 和单独文件夹的区别
-
Images.xcassets
(1)图片的资源包放到 Images.xcassets 中,会把所有的文件打包 Assets.car文件,图片会被压缩,从而使包的体积变小。
(2)只支持png格式的图片
(3)图片只支持 [UIImage imageNamed:@"logo01"] 的方式实例化
imageView.image = [UIImage imageNamed:@"logo01"];
-
单独文件夹
(1)图片的资源包放到文件夹中,会被打包 MainBundle 中。图片不会被压缩。
(2)可以使用 [UIImage imageNamed:@"logo01"] 加载,也可以使用i mageWithContentOfFile: 方法加载。
// imageView.image = [UIImage imageNamed:@"logo01"]; NSString *path = [[NSBundle mainBundle] pathForResource:@"logo01.png" ofType:nil]; imageView.image = [UIImage imageWithContentsOfFile:path];
二、通过 imageNamed 和imageWithContentsOfFile 加载图片的区别
-
imageNamed
(1)加载到内存当中会一直存在内存当中,(图片)不会随着对象的销毁而销毁。
(2)相同的图片是不会重复加载内存中
(3)加载到内存中占据的内存较大
-
imageWithContentsOfFile
(1)加载的图片会随着对象的销毁而销毁
(2)相同的图片是会重复加载到内存中
(3)加载到内存中占据的内存较大
三、总结
放在 Images.xcassets 里边的图片打包时,会被压缩成.car文件,APP的体积变小。但是不能通过路径方式加载图片,只能使用 [UIIimage imageName:]
而imageName:这个方法加载图片,会在内存中一直存在,什么时候销毁不受管理员控制,因此适用于加载频繁的小图片
而放在文件夹的图片,可以使用imageWithContentOfFile:方法加载,该方法的好处是内存随着对象的销毁而销毁,因此适用于大图片、频率低的图片