图片重名研究

在我们的 iOS 工程中,在同一个目录下是不允许存在两张名字相同的图片的,但是在不同目录下却可以允许这种情况,所以就有了一个疑问:就是调用 imageNamed 方法时,对相同名字的图片,会加载哪一张图片呢??

接下来带着这个疑问,开始了我们的探讨。

  1. 同一个 xcassets 文件,不同文件目录下的图片。
    和 unicode 编码有关,该 xcassets 中的图片在 IPA 包中的排列顺序与 “该图片的名字” 和 “该图片所在文件夹的名字” 都相关。
    同一层级的 “文件夹名字” 和 “图片名字”,参与到排序中,排列顺序是按字符串大小,由小到大进行排序。


    图片重名研究_第1张图片
    Snip20170322_2.png

    图片重名研究_第2张图片
    这个是模拟器显示出的图片.png
  2. 不同 xcassets 文件,最终加载图片与 xcassets 的命名有关,优先加载字符串小的 xcassets 中的图片(aaaa.xcassets >> abc. xcassets >> zc.xcassets)。


    图片重名研究_第3张图片
    Snip20170322_5.png

    图片重名研究_第4张图片
    ![这个是模拟器显示出的图片.png](http://upload-images.jianshu.io/upload_images/317385-6753db1fd58c9670.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  3. 对于 xcassets 中的图片,与 Xcode 中分文件夹(黄色的文件夹),优先加载 xcassets 中的图片。

图片重名研究_第5张图片
Snip20170322_8.png

最终结论:所有 xcassets 文件中的图片,在 IPA 包中的排列顺序都是按照字符串大小排序,类似一个数组,依次遍历,当找到对应的图片时,则返回,否则继续遍历直到数组末尾,若在 xcassets 中未找到,则去 Xcode 其他文件夹中寻找。

在 ipa 文件中,打开包内容,找到 Assets.car 文件,打开后发现,该文件内只含有一张同名的图片,也就是说打包时,对于同名的图片,只会按照刚刚所说的排序方式,取出第一张加入到 ipa 包中。


图片重名研究_第6张图片
Snip20170322_11.png

你可能感兴趣的:(图片重名研究)