在我們的 iOS 工程中,在同一個目錄下是不允許存在兩張名字相同的圖片的,但是在不同目錄下卻可以允許這種情況,所以就有了一個疑問:就是調用 imageNamed 方法時,對相同名字的圖片,會加載哪一張圖片呢??
接下來帶著這個疑問,開始了我們的探討。
-
同一個 xcassets 文件,不同文件目錄下的圖片。
和 unicode 編碼有關,該 xcassets 中的圖片在 IPA 包中的排列順序與 “該圖片的名字” 和 “該圖片所在文件夾的名字” 都相關。
同一層級的 “文件夾名字” 和 “圖片名字”,參與到排序中,排列順序是按字符串大小,由小到大進行排序。
Snip20170322_2.png
這個是模擬器顯示出的圖片.png -
不同 xcassets 文件,最終加載圖片與 xcassets 的命名有關,優先加載字符串小的 xcassets 中的圖片(aaaa.xcassets >> abc. xcassets >> zc.xcassets)。
Snip20170322_5.png
 對于 xcassets 中的圖片,與 Xcode 中分文件夾(黃色的文件夾),優先加載 xcassets 中的圖片。
Snip20170322_8.png
最終結論:所有 xcassets 文件中的圖片,在 IPA 包中的排列順序都是按照字符串大小排序,類似一個數組,依次遍歷,當找到對應的圖片時,則返回,否則繼續遍歷直到數組末尾,若在 xcassets 中未找到,則去 Xcode 其他文件夾中尋找。
在 ipa 文件中,打開包內容,找到 Assets.car 文件,打開后發現,該文件內只含有一張同名的圖片,也就是說打包時,對于同名的圖片,只會按照剛剛所說的排序方式,取出第一張加入到 ipa 包中。
Snip20170322_11.png