UIImage的緩存(內存管理)

兩種方式加載本地圖片

通過imageNamed:方法加載圖片

1.用過這種方式加載圖片,一旦圖片加載到內存中,那么就不會銷毀,一直到程序退出。(也就是說imageNamed:會有圖片緩存的功能,當下次訪問圖片的時候速度會更快。)

2.用這種方式加載圖片,圖片的內存管理并不受程序員控制。

3.UIImage *image = [UIImage imageNamed: @“image”]的意思是創建一個UIImage對象,并不是說image這個本身就是一張圖片,而是image指向一張圖片。在創建這個對象的時候實際上并沒有把真正的圖片加載到內存里,而是等到用到圖片的時候才會加載。

4.如上例,如果把image對象設置為nil,如果是其它對象,那么沒有強指針指向一個對象,這個對象就會銷毀;但是即使image = nil,它會指向的圖片資源也不會銷毀。

通過imageWithContentsOfFile:方式加載圖片

1.使用這個方法加載圖片,當指向圖片對象的指針銷毀或指向其它對象,這個圖片對象沒有其它強指針指向,這個圖片對象會銷毀,不會一直在內存中停留。

2.因為沒有緩存,所以如果相同的圖片多次加載,那么也會有多個圖片對象來占用內存,而不是用緩存的圖片。

3.使用這個方法,需要file的全路徑(之前用NSString, NSArray之類的加載文件也是一樣的,比如stringWithContentsOfFile:,看到file就知道是需要傳入全路徑。)

NSString *imagePath = [[NSBundle mainBundle] pathForResource:imageName ofType:@"png"];

UIImage *image = [UIImage imageWithContentsOfFile:imagePath];

4.注意如果圖片在Images.xcassets中,是不能使用這個方法的。所以說想要自己進行圖片的內存管理(不希望有緩存圖片),那么要將圖片資源直接拖入工程,而不是放在Images.xcassets中。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容