[UIImage imageNamed:@"xxx"]
在平時(shí)的使用中很常見(jiàn)。如設(shè)置某些圖標(biāo),底部Icon或者底部可見(jiàn)視圖。
但是由于 imageNamed:
自身的渲染問(wèn)題,導(dǎo)致產(chǎn)生了加載時(shí)間的延長(zhǎng)問(wèn)題。雖然時(shí)間只是 ms
級(jí)別的,但是在某些情況下或者某種程度上也是會(huì)App性能產(chǎn)生影響的。
相對(duì)于直接使用 imageNamed:
加載圖片而言使用下面的方法加載圖片將會(huì)更加的節(jié)省效能。
// 使用線程加載/自動(dòng)釋放池 用法
dispatch_async(dispatch_get_global_queue(0, 0), ^{
@autoreleasepool{
[[UIImage imageNamed:@"訂"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal];
}
});
還有一點(diǎn)是對(duì)于相應(yīng)的圖片或者Icon是放在 工程目錄中
還是放在 Assets.xcassetts
中。
在圖片加載時(shí)間性能上來(lái)說(shuō),應(yīng)該放在 Assets.xcassets
中 。可能是放在系統(tǒng)自動(dòng)生成的Assets.xcassets目錄中系統(tǒng)會(huì)自動(dòng)為資源做出緩存,以便更加高效的加載。
對(duì)于處理某些功能性代碼的耗時(shí)情況的查看可以使用 Xcode ==> instruments ==> Time Profiler
或者使用下面的系統(tǒng)獲取時(shí)間判斷也可
// 直接使用 `CFAbsoluteTime` 獲取當(dāng)前時(shí)間
CFAbsoluteTime startTime = CFAbsoluteTimeGetCurrent();
// 經(jīng)過(guò)時(shí)間
CFAbsoluteTime linkTime = (CFAbsoluteTimeGetCurrent() - startTime);
NSLog(@"log--輸出time:%f ms",linkTime*1000);