日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS imageNamed 的缓存问题

發布時間:2025/4/16 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS imageNamed 的缓存问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如題,是不是大家為了方便都這樣加載圖片啊

myImage = [UIImage imageNamed:@"icon.png"];
那么小心了
這種方法在一些圖片很少,或者圖片很小的程序里是ok的。
但是,在大量加載圖片的程序里,請千萬不要這樣做。
為什么呢 ???????

這種方法在application bundle的頂層文件夾尋找由供應的名字的圖象 。 如果找到圖片,裝載到iPhone系統緩存圖象。那意味圖片是(理論上)放在內存里作為cache的。

試想你圖片多了,是什么后果``````
圖片cache極有可能不會響應 memory warnings and release its objects

所以,用圖片的時候一定要小心的alloc和release
推薦使用
NSString *path = [[NSBundle mainBundle] pathForResource:@”icon” ofType:@”png”];
myImage = [UIImage imageWithContentsOfFile:path];

?

?

?

用UIImage加載圖像的方法很多,最常用的是下面兩種:

??? 1、用imageNamed函數

[UIImage imageNamed:ImageName];

??? 2、用NSData的方式加載,例如:

?? 1. NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:extension];
?? 2. NSData *image = [NSData dataWithContentsOfFile:filePath];
?? 3. [UIImage imageWithData:image];

??? 由于第一種方式要寫的代碼比較少,可能比較多人利用imageNamed的方式加載圖像。其實這兩種加載方式都有各自的特點。

??? 1)用imageNamed的方式加載時,系統會把圖像Cache到內存。如果圖像比較大,或者圖像比較多,用這種方式會消耗很大的內存,而且釋放圖像的 內存是一件相對來說比較麻煩的事情。例如:如果利用imageNamed的方式加載圖像到一個動態數組NSMutableArray,然后將將數組賦予一 個UIView的對象的animationImages進行逐幀動畫,那么這將會很有可能造成內存泄露。并且釋放圖像所占據的內存也不會那么簡單。但是利 用imageNamed加載圖像也有自己的優勢。對于同一個圖像系統只會把它Cache到內存一次,這對于圖像的重復利用是非常有優勢的。例如:你需要在 一個TableView里重復加載同樣一個圖標,那么用imageNamed加載圖像,系統會把那個圖標Cache到內存,在Table里每次利用那個圖 像的時候,只會把圖片指針指向同一塊內存。這種情況使用imageNamed加載圖像就會變得非常有效。

??? 2)利用NSData方式加載時,圖像會被系統以數據方式加載到程序。當你不需要重用該圖像,或者你需要將圖像以數據方式存儲到數據庫,又或者你要通過網絡下載一個很大的圖像時,請盡量使用imageWithData的方式加載圖像。

??? 無論用哪種方式加載圖像,圖像使用結束后,一定要記得顯示釋放內存。

?

原文連接:http://www.cnblogs.com/pengyingh/articles/2355033.html

轉載于:https://www.cnblogs.com/wfwenchao/articles/3730595.html

總結

以上是生活随笔為你收集整理的iOS imageNamed 的缓存问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。