iOS加載本地圖片有兩種方式:imageName和imageWithContentOfFile
區(qū)別
緩存:imageNamed:
只需傳入文件名.擴展名即可。
可以加載bundle中任意位置的圖片,包括main bundle中其他bundle的。
imageNamed方法創(chuàng)建對象的步驟如下:
根據(jù)圖片文件名在緩存池中查找圖片數(shù)據(jù),如存在,則創(chuàng)建對象并返回;
如果不存在,則從bundle中加載圖片數(shù)據(jù),創(chuàng)建對象并返回;
如果相應的圖片數(shù)據(jù)不存在,返回nil。
不緩存:imageWithContentsOfFile:
必須傳入圖片文件的全名(全路徑+文件名)。
無法加載Images.xcassets中的圖片。
如果圖片是被放入到Assets.xcassets:
1.打包程序,Assets.xcassets會被打包成Assets.car.
2.如果被打包成Assets.car文件,那么就拿不到其中圖片的全路徑
3.只能通過imageName:加載圖片
4.不能通過imageWithContentOfFile:加載圖片
如果圖片時被拖入項目目錄中
1.圖片會被放入到mainBundle中
2.放入mainBundle中才可以獲取圖片的全路徑
3.可以通過imageWithContentOfFile:加載
4.也可以通過imageName:來加載
總結:
imageName可以加載Assets.car中的圖片,也可以加載mainBundle中圖片
imageWithContentsOfFile只能加載mainBundle中圖片
內存及使用區(qū)別
使用imageName:加載圖片
加載到內存當中會一直存在內存當中,(圖片)不會隨著對象的銷毀而銷毀。
加載進去圖片后,占用的內存歸系統(tǒng)管理,我們是無法管理的。
相同的圖片是不會重復加載的
加載到內存中占據(jù)的內存較大
使用imageWithContentOfFile:加載圖片
加載到內存中占據(jù)的內存較小
相同的圖片會被重復加載到內存當中
加載的圖片會隨著對象的銷毀而銷毀
該用哪個方法加載圖片
如果圖片較小,并且使用頻繁的圖片使用imageName:方法來加載
如果圖片較大,并且使用較少,使用imageWithContentOfFile:來加載。