在我们的 iOS 工程中,在同一个目录下是不允许存在两张名字相同的图片的,但是在不同目录下却可以允许这种情况,所以就有了一个疑问:就是调用 imageNamed 方法时,对相同名字的图片,会加载哪一张图片呢??
接下来带着这个疑问,开始了我们的探讨。
-
同一个 xcassets 文件,不同文件目录下的图片。
和 unicode 编码有关,该 xcassets 中的图片在 IPA 包中的排列顺序与 “该图片的名字” 和 “该图片所在文件夹的名字” 都相关。
同一层级的 “文件夹名字” 和 “图片名字”,参与到排序中,排列顺序是按字符串大小,由小到大进行排序。
-
不同 xcassets 文件,最终加载图片与 xcassets 的命名有关,优先加载字符串小的 xcassets 中的图片(aaaa.xcassets >> abc. xcassets >> zc.xcassets)。
对于 xcassets 中的图片,与 Xcode 中分文件夹(黄色的文件夹),优先加载 xcassets 中的图片。
最终结论:所有 xcassets 文件中的图片,在 IPA 包中的排列顺序都是按照字符串大小排序,类似一个数组,依次遍历,当找到对应的图片时,则返回,否则继续遍历直到数组末尾,若在 xcassets 中未找到,则去 Xcode 其他文件夹中寻找。
在 ipa 文件中,打开包内容,找到 Assets.car 文件,打开后发现,该文件内只含有一张同名的图片,也就是说打包时,对于同名的图片,只会按照刚刚所说的排序方式,取出第一张加入到 ipa 包中。