UIImage使用

細講UIImage加載方


前言

關於本地圖片UIImage的加載問題,仍是須要注意的。不一樣的加載處理方式,在效率和性能上仍是有差別的。緩存

今天,咱們來說講UIImage的加載應該選擇什麼樣的API來加載!性能

兩種API

這兩種API分別是:spa

  • -imageNamed: 默認加載圖片成功後會內存中緩存圖片,這個方法用一個指定的名字在系統緩存中查找並返回一個圖片對象。若是緩存中沒有找到相應的圖片對象,則從指定地方加載圖片而後緩存對象並返回這個圖片對象。一般是加載bundle中的圖片資源!對象

  • -initWithContentsOfFile: 僅僅加載圖片而不在內存中緩存下來,那麼每次獲取時都會從新去加載。圖片

使用場景

  • -imageNamed: 是讀取到內存後會緩存下來,下次再讀取時直接從緩存中獲取,所以訪問效率要比較高。對於圖片資源比較小,使用比較頻繁的圖片,一般會選擇使用此種方式來加載。固然,若不須要考慮性能時,直接使用此種方式也是能夠的。內存

  • -initWithContentsOfFile: 當圖片資源比較大,或者圖片資源只使用一次就再也不使用了,那麼使用此種方式是最佳方式。當應用程序須要加載一張比較大的圖片而且是一次性使用的,那麼是沒有必要去緩存這個圖片的,用-imageWithContentsOfFile:是最爲經濟的方式,這樣不會由於UIImage元素較多狀況下,CPU會被逐個分散在沒必要要的緩存上而浪費過多CPU時間。另外,當咱們的圖片不是PNG圖片時,咱們一般會選擇此種方式來加載。資源

大量使用-initWithContentsOfFile:方式來加載圖片,會增長CPU的開銷,因此咱們須要根據特定場景慎重選擇圖片加載的方式。即便UIImage較小,但使用UIImage元素較多時,問題會有所凸顯哦!開發

代碼使用

  • 對於-imageNamed: 這個API的調用就很是簡單了,直接就是:it

1table

2

3

4

5

6

7

8

9

 

UIImage *image = [UIImage imageNamed:@"logo"];

 

// 在開發中,一般都定義了快捷調用的宏

#define kImgName(name) [UIImage imageNamed:name]

 

// 使用時就更簡化了

UIImage *image = kImgName(@"logo");

 

  • 對於-initWithContentsOfFile:的使用就相對複雜了一點點:

1

2

3

4

5

6

7

8

9

10

11

 

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"logo" ofType:@"png"];

UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];

 

// 可是在開發中,筆者一般會定義成宏,簡化調用

#define kResourcePath(name, type) ([[NSBundle mainBundle] pathForResource:name ofType:type])

#define kImgFromFile(name, type) [[UIImage alloc] initWithContentsOfFile:kResourcePath(name, type)]

 

// 而後,調用也變得很簡化了~

UIImage *image = kImgFromFile(@"logo", @"png");

 

最後

閱讀到此,是否對UIImage有更深刻地瞭解了?我相信這篇文章能更幫助您更好在地開發中使用圖片加載。本篇文章全部內容不表明全正確,如有錯誤之處,請聯繫筆者或者在評論中指出!

相關文章
相關標籤/搜索