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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

解决SDWebimage加载过多过大图片导致内存爆表崩溃的问题

發布時間:2024/1/18 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决SDWebimage加载过多过大图片导致内存爆表崩溃的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題:

Restore the connection to “xxxx” and run “xx” again, or if “xx” is still running, you can attach to it by selecting Debug > Attach to Process > xx.

原因:

collectionView一屏加載顯示多個大圖,導致內存消耗激增,程序被系統關閉。

(這里collectionView已經實現重用,高度以及view統一布局,主要內存問題在于圖片的請求和加載處理過程)

  • 1、圖片太大,服務器沒有做相關壓縮及縮略圖處理
  • 2、SDWebimage同時加載過多過大高分辨率圖片,內存消耗爆表。

解決方向:

  • 1、服務端處理圖片,壓縮以及做縮略圖處理。(暫時沒有)
  • 2、上傳圖片作壓縮處理,在不損耗質量的前提下盡量壓縮。(盡量去做,但是圖片并非全部來自手機上傳,而且也只是適當減輕一些負載,但并不能解決問題)
  • 3、解決SDWebimage加載高分辨率大圖的問題。

iOS解決SDWebimage加載高分辨率大圖crash的問題。

之前看到很多解決問題的方法,比如

  • 1、每次加載圖片清空內存的緩存

[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"];這個在這里沒有什么效果,只是清除在加載圖片開始的時候做清理,但是對于列表UITableview或者UICollectionView而言,瞬間發出N多個加載請求,主要負載其實還在請求之后。

不過這篇文章里提到了幾種解決方法,雖然最后作者選擇了當前方法,但是實際使用之后,效果并不好。

  • 2、修改SDWebimage源生圖片處理方法

不過這篇文章提到的方法并沒有實際驗證,因為SDWebimage版本的問題,當前使用版本為pod 'SDWebImage', '~> 4.3.3'。

  • 3、SDWebimage下載的options選項加入SDWebImageScaleDownLargeImages

對于少量的分辨率圖片會有效果。但是對當前所要解決的大量(一屏顯示30-40張)的高質量圖片,依舊會因為內存激增而崩潰。

  • 4、配置SDWebimage參數,解決問題。

在APPDelegate中設置相關參數。

- (void)imageLoadingSettings {[SDImageCache sharedImageCache].config.maxCacheAge = 3600 * 24 * 7;[SDImageCache sharedImageCache].maxMemoryCost = 1024 * 1024 * 20;[SDImageCache sharedImageCache].config.shouldCacheImagesInMemory = NO;[SDImageCache sharedImageCache].config.shouldDecompressImages = NO;[SDWebImageDownloader sharedDownloader].shouldDecompressImages = NO;[SDImageCache sharedImageCache].config.diskCacheReadingOptions = NSDataReadingMappedIfSafe; }

其次在加載方法的options中設置SDWebImageScaleDownLargeImages

[_billImageView sd_setImageWithURL:url placeholderImage:image options:SDWebImageRetryFailed|SDWebImageScaleDownLargeImages|SDWebImageRefreshCached];[[SDImageCache sharedImageCache] setValue:nil forKey:@"memCache"]; // tableView/collectionView加載更多的時候,會有一定的效果。

這里的options一定不能設置SDWebImageProgressiveDownload否則前面的設置并不會產生效果,導致崩潰。

這是一種極端的情況,一般加載大圖,在手機上只需要一次加載少量的圖片。如果是列表顯示,一般會做圖片的縮略處理。

總結

以上是生活随笔為你收集整理的解决SDWebimage加载过多过大图片导致内存爆表崩溃的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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