ios 進階 -- 圖片記憶體管理

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   io   檔案   

     最近在做最佳化程式的效能方面的工作,涉及到了圖片記憶體管理方面,所以這方面的內容總結一下,

1,為什麼做圖片記憶體管理?

     問題a,程式啟動後,瀏覽圖片時, 記憶體一直增長。

     問題b,  瀏覽圖片時,程式UI顯示不流暢,即使本地的圖處,也不流暢。


2,怎麼做圖片記憶體管理?

           對應用程式定義域內的圖片記憶體進行管理, 當程式的多個地方需要 引用一個圖片時,都指向同一個圖片的記憶體位址。


3,如何做?

      如果是本地資源時的圖片,地址固定,不存在到期問題 我們可以直接 使用系統  [UIImage  ImageName:] 方法。 這個方法本身就做了,記憶體緩衝。 

 多個地方 調用同個圖片地址時,它返回的都是同一個記憶體位址。

      如果是網狀圖片的話,  我們可以將 網路請求下來的圖片放在緩衝裡,下次再訪問時,先檢查此圖片是否在緩衝裡,如果在,則直接返回圖片,如果沒有,則檢查則重新請求。

       大至的做法 是,將請求的URL 與圖片放在 字典裡,  url  做key,   圖片內容 做value ,如果 下次再使用圖片時,先檢查url 的key 時否已經存在就可以了。

     當然我們只是說了大概的原理,忽略許多細節,片記憶體大小管理,圖片檔案快取管理,圖片同步/非同步載入,  圖片記憶體清理時,不同的圖片的清理策略  等等,  諸多問題。     

     當然,開源圖片記憶體管理項目比較多,對以上的問題,解決的也比較 好, 以下是我推薦的自己常用的庫

     a,  SGImageCache    https://github.com/seatgeek/SGImageCache

[SGImageCache getImageForURL:url thenDo:^(UIImage *image) {    if (image) {        self.imageView.image = image;    }}];


     b,   SDWebImageManager

SDWebImageManager *manager = [SDWebImageManager sharedManager];UIImage *cachedImage = [manager imageWithURL:url];if (cachedImage){    // Use the cached image immediatly}else{    // Start an async download    [manager downloadWithURL:url delegate:self];}
(SDWebImageManager *)imageManager didFinishWithImage:(UIImage *)image{    // Do something with the downloaded image}</code>



  轉載請標明出處 http://blog.csdn.net/sea918 謝謝。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.