简述:
1、工程中所有使用 Asset Catalog 管理的图片(在 .xcassets 文件夹下),最终输出的时候,都会被压缩到 Assets.car 内。
2、反之,不在 Assets.car 内的,我们将它统一归类为 Bundle 管理的。
Bundle 和 xcassets 的主要区别有:
1)xcassets 里面的图片,只能通过 imageNamed 加载。Bundle 还可以通过 imageWithContentsOfFile 等方式。
2)xcassets 里的 2x 和 3x,会根据具体设备分发,不会同时包含。而 Bundle 会都包含。(App Slicing)
3)xcassets 内,可以对图片进行 Slicing,即裁剪和拉伸。Bundle 不支持。
4)Bundle 内支持多语言,xcassets 不支持。
另外,使用 imageNamed 创建的 UIImage,会立即被加入到 NSCache 中(解码后的 Image Buffer),直到收到内存警告的时候,才会释放不在使用的 UIImage。
而 imageWithContentsOfFile。它每次都会重新申请内存,相同图片不会缓存。
所以,xcassets 内的图片,加载后会产生缓存。
综上,我认为,常用的,较小的图,应该放在 xcassets 内管理。而大图应该放在 Bundle 内管理。
关于 xcassets,我们有这么几点需要注意:
1)图片的大小,一定要准确。不要出现图片太大的情况。
2)不要存放大图,大图会产生缓存。
3)不要存放 JPEG 格式图片,会导致图片变大。
摘选自:https://xiaozhuanlan.com/colin