UIImage加載圖片的優(yōu)化

一個App中會用到很多圖片,你用哪種方式創(chuàng)建才會更優(yōu)化你的產(chǎn)品呢??

A:imagedNamed初始化
B:imageWithContentsOfFile初始化
   imageNamed默認(rèn)加載圖片成功后會內(nèi)存中緩存圖片,這個方法用一個指定的名字在系統(tǒng)緩存中查找并返回一個圖片對象.如果緩存中沒有找到相應(yīng)的圖片對象,則從指定地方加載圖片然后緩存對象,并返回這個圖片對象.
   而imageWithContentsOfFile則僅只加載圖片,不緩存.
大量使用imageNamed方式會在不需要緩存的地方額外增加開銷CPU的時間來做這件事.當(dāng)應(yīng)用程序需要加載一張比較大的圖片并且使用一次性,那么其實是沒有必要去緩存這個圖片的,用imageWithContentsOfFile是最為經(jīng)濟的方式,這樣不會因為UIImage元素較多情況下,CPU會被逐個分散在不必要緩存上浪費過多時間.
   使用場景需要編程時,應(yīng)該根據(jù)實際應(yīng)用場景加以區(qū)分,UIimage雖小,但使用元素較多問題會有所凸顯.

1> 不要在 viewWillAppear 中做費時的操作
viewWillAppear: 在 view 顯示之前被調(diào)用,出于效率考慮,在這個方法中不要處理復(fù)雜費時的事情;只應(yīng)該在這個方法設(shè)置 view 的顯示屬性之類的簡單事情,比如背景色,字體等。要不然,用戶會明顯感覺到 view 顯示遲鈍。
2> 在正確的地方使用reuseIdentifier
table view用 tableView:cellForRowAtIndexPath: 為rows分配cells的時候,它的數(shù)據(jù)應(yīng)該重用自UITableViewCell。 一個table view維持一個隊列的數(shù)據(jù)可重用的UITableViewCell對象。
3> 盡量把views設(shè)置為透明
如果你有透明的Views你應(yīng)該設(shè)置它們的opaque屬性為YES。原因是這會使系統(tǒng)用一個最優(yōu)的方式渲染這些views。這個簡單的屬性在IB或者代碼里都可以設(shè)定。
4> 避免過于龐大的XIB
盡量簡單的為每個Controller配置一個單獨的XIB,盡可能把一個View Controller的view層次結(jié)構(gòu)分散到單獨的XIB中去, 當(dāng)你加載一個引用了圖片或者聲音資源的nib時,nib加載代碼會把圖片和聲音文件寫進內(nèi)存。在OS X中,圖片和聲音資源被緩存在named cache中以便將來用到時獲取
5> 不要阻塞主線程
永遠不要使主線程承擔(dān)過多。因為UIKit在主線程上做所有工作,渲染,管理觸摸反應(yīng),回應(yīng)輸入等都需要在它上面完成,大部分阻礙主進程的情形是你的app在做一些牽涉到讀寫外部資源的I/O操作,比如存儲或者網(wǎng)絡(luò)。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,   0), ^{
         // 選擇一個子線程來執(zhí)行耗時操作
          dispatch_async(dispatch_get_main_queue(), ^{
        // 返回主線程更新UI
         });
 });

6> 在Image Views中調(diào)整圖片大小
如果要在UIImageView中顯示一個來自bundle的圖片,你應(yīng)保證圖片的大小和UIImageView的大小相同。在運行中縮放圖片是很耗費資源的

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容