日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

imageNamed和imageWithContentsOfFile-无法加载图片的问题

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 imageNamed和imageWithContentsOfFile-无法加载图片的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

圖片資源放在Assets.xcassets中,分別用UIImage的類方法imageNamed和imageWithContentsOfFile獲取圖片對象,但發生奇怪的情況,前者獲取到圖片對象,后者結果為nil。代碼如下:

1.通過UIImage的類方法imageNamed:可以獲取到圖片對象。

UIImage *imge = [UIImage imageNamed:@"test.jpg"];

?

2.但通過UIImage的類方法imageWithContentsOfFile:得到img為nil

//NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"jpg"]; NSString *path = [[NSBundle mainBundle] pathForResource:@"test.jpg" ofType:nil]; UIImage *imge = [UIImage imageWithContentsOfFile:path];

?

?

問題分析

其實,UIImage創建對象有兩種方法:

  • ?imageNamed:創建的對象會緩存到系統內存中,不會立即釋放到內存。好處是再次加載使用這種方式會減少讀取操作,加快程序運行。缺點:加載過多圖片會占用大量內存空間。
  • 創建圖片對象,首先在緩存中查找是否有該對象,有則直接取出對象,
  • 沒有則從bundle中查找圖片資源,有則創建對象并返回。
  • bundle中也沒有圖片資源,則返回nil。
    • ?imageWithContentsOfFile:mageWithContentsOfFile創建的對象不會緩存到系統內存中。好處是不產生緩存。缺點:對于經常使用的小圖片,會頻繁讀取。

    imageNamed只需傳文件名,imageWithContentsOfFile需要傳入文件全路徑,而文件全路徑可以通過NSBundle得到。

    注意:

    如果在項目中的Assets.xcassets(藍色文件夾)

    • 不可以NSBundle獲得資源路徑,然后imageWithContentsOfFile加載
    • 可以imageNamed加載

    如果在項目中真實文件夾(藍色文件夾,除Assets.xcassets):

    • 可以NSBundle獲得資源路徑,然后imageWithContentsOfFile加載。注意要帶文件夾路徑,例如[[NSBundle mainBundle]pathForResource:@"test.jpg" ofType:nil inDirectory:@"image"]
    • 不可以imageNamed加載

    如果在項目中虛擬文件夾(黃色文件夾):

    • 可以NSBundle獲得資源路徑,然后imageWithContentsOfFile加載
    • 可以imageNamed加載

    問題解決

    ???? 只能imageNamed獲取Assets.xcassets的圖片資源

    轉載于:https://www.cnblogs.com/Zev_Fung/p/5407642.html

    總結

    以上是生活随笔為你收集整理的imageNamed和imageWithContentsOfFile-无法加载图片的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。