国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

UIImage的imageWithContentsOfFile:path和imageNamed的區(qū)別

2019-11-14 19:29:20
字體:
供稿:網(wǎng)友

在做 tomcat 小例子的時候,發(fā)現(xiàn)了這個問題,摘自官方文檔

+ (UIImage *)imageWithContentsOfFile:(NSString *)path

通過加載指定路徑(全路徑)中的文件,查找加載圖像數(shù)據(jù),從而生成并返回一個圖形對象(或者 nil),但是僅僅是加載出圖像的對象,并不緩存這個圖形對象。

一般用法:

NSString *file = [[NSBundle mainBundle] pathForResource:name ofType:nil];UIImage *image = [UIImage imageWithContentsOfFile:file];

其實(shí),仔細(xì)看,很顯然,在文檔里,官方是Creating New Images下面的方法介紹。僅僅是創(chuàng)建新圖片對象。

再看

imageNamed:inBundle:compatibleWithTraitCollection:

屬于目錄Cached Image Loading Routines下,是在包bundle中,通過匹配某特征(直接寫圖片名字即可),返回一個圖像,餅把圖緩存。

+ (UIImage *)imageNamed:(NSString *)name               inBundle:(NSBundle *)bundlecompatibleWithTraitCollection:(UITraitCollection *)traitCollection

參數(shù)分別是圖片名字,圖片在的包,用來描述希望生成的圖的特征的集合。這三個參數(shù)的此方法是 IOS8的新特性!如果找不到匹配的就返回 nil。

成功生成圖片對象之后,如果在內(nèi)存里這個生成的圖片緩存不存在了,那么這個方法還是會去磁盤或者其他資源里定位并加載這個圖片數(shù)據(jù),返回。故,緩存一直存在!

此方法屬于線程不安全的!

這里要看下這個

UITraitCollection 

這個類是視圖管理器的一些特征、細(xì)節(jié)存儲的集合類,比如比例,尺寸等,當(dāng)視圖控制器生成,那么這個集合也自動為這個視圖控制器生成一個對象。當(dāng)然,一些其他的類,比如 UIImage 類,也會擁有類似的功能去存相同的特征。

 

一個參數(shù)的

+ (UIImage *)imageNamed:(NSString *)name

返回的是圖形對象(或者nil),且有緩存,如果這個圖是第一次被加載,那么這個方法會去app 的主包里通過 name尋找這個圖片。這也就是為什么,在往項目中拖拽圖片素材時,通常看選擇

1> Destination: 勾選

2> Folders:

的不同,那么使用的方法是受限制的。

因為選擇第一項:生成的黃色文件夾(區(qū)分點(diǎn)),在Xcode中分文件夾,但是在Bundle中所有素材都在同一個文件夾下,開發(fā)效率很高,因此,不能出現(xiàn)文件重名的情況,可以直接使用[NSBundle mainBundle]作為資源路徑,效率高!可以使用[UIImage imageNamed:]加載圖像。選擇第二項:生成藍(lán)色文件夾(特點(diǎn)),那么Xcode中分文件夾,Bundle中同樣分文件夾,因此,可以出現(xiàn)文件重名的情況,那么需要在[NSBundle mainBundle]的基礎(chǔ)上拼接實(shí)際的路徑,效率較差!且不能使用[UIImage imageNamed:]加載圖像。

 

同樣是線程不安全。

 

總得來說,使用大的圖片,如果不是常用,那么用 imagewithcontentsoffile 方法,比較小的(比如圖標(biāo)),需要經(jīng)常使用的,那么用后者,imageNamed 加載。內(nèi)存常駐,效率高。不過,就如 tomcat 里,那么多圖片,一起用 imagenamed 加載,很容易內(nèi)存泄露,程序崩潰,還需要及時關(guān)閉動畫,清除圖片數(shù)組等措施。

 

暫時了解下,以后有新發(fā)現(xiàn)再看。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 抚顺市| 丽江市| 石楼县| 中宁县| 定州市| 醴陵市| 高尔夫| 桓台县| 平安县| 迁安市| 金塔县| 浙江省| 大港区| 铜陵市| 和田市| 郑州市| 襄垣县| 玉门市| 胶州市| 榆林市| 乡城县| 阿巴嘎旗| 会同县| 武汉市| 奈曼旗| 马龙县| 崇义县| 台南市| 西乌珠穆沁旗| 勐海县| 板桥市| 新泰市| 麻江县| 会东县| 兴业县| 苏尼特右旗| 呼伦贝尔市| 福州市| 英超| 密山市| 兰西县|