91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

IOS 多個UIImageView 加載高清大圖時內存管理

發布時間:2020-07-12 22:15:55 來源:網絡 閱讀:527 作者:卓行天下 欄目:移動開發

IOS 多個UIImageView 加載高清大圖時內存管理

 當我們在某一個View  多個UIImageView,且UIImageView都顯示的是高清大圖,就有可能出現內存警告的問題。如果第一次進入這個view,沒有發生內存警告,當再次進入這個view,如果上一次的內存沒有及時釋放,這一次次的累加,便可導致內存崩潰。


1,UIImage 加載圖片的方式。

      如果是本地圖片,盡量不要使用 [UIImage  p_w_picpathNamed:nil]; 這種方式,如果使用這種方式加載,只要程序不退出,它便一直會在內存中。

     我們可以使用 :

                        NSString *path = [[NSBundlemainBundle]pathForResource:@'"圖片的名字" ofType:@""];

                        UIImage *p_w_picpath = [UIImagep_w_picpathWithContentsOfFile:path];


         那兩者的優缺點就很明顯了,[UIImage  p_w_picpathNamed:nil]; 只需加載一次,它便在內存中,所以第二次加載速度很快。而第二種加載方式由于我們將它釋放掉了,會再次加載。所以選用那種方式,依你情況而定。


2,上面說的第二種方式,雖然可以釋放掉,但我們要告訴人家什么時候釋放。也就是說,當前顯示頁面不是這個view時,我們便將它釋放掉:

- (void)viewWillDisappear:(BOOL)animated{

    [UIImageView removeFromSuperview];

    UiImageView = nil;

}


當然,當我們再次進入這個view時,便要將移除掉的view再次添加進來


- (void)viewDidAppear:(BOOL)animated{

   [self addSubView:UIImageView];

}


3,上述兩種方式,主要解決內存累加的問題。但如果第一次進入view,圖片全部渲染在view上時,內存就崩潰了。那我們只能在圖片上做文章了。我們加載的高清大圖如果差不多都是3000*2000,也可能比這個還大,就算我們的程序是iPad App,iPad 4  的分辨率才多少,這些圖遠遠大于設備的分辨率,完全是資源浪費,所以我們通常的一個做法,便是將這樣的圖以小尺寸渲染到view上。


推薦使用:


  • UIImage+Resize.h, UIImage+Resize.m

  • Extends the UIImage class to support resizing (optionally preserving the original aspect ratio), cropping, and generating thumbnails.


  • UIImage+RoundedCorner.h, UIImage+RoundedCorner.m

  • Extends the UIImage class to support adding rounded corners to an p_w_picpath.


  • UIImage+Alpha.h, UIImage+Alpha.m

  • Extends the UIImage class with helper methods for working with alpha layers (transparencies).


常用方法:


 UIImage *p_w_picpath 

 UIImage *thumbImage = [p_w_picpaththumbnailImage:140// This should the size of the view in collection view. example: myCell width is 20 and height is 20.

                                      transparentBorder:0

                                          cornerRadius:0

                                   interpolationQuality:kCGInterpolationMedium];       //生成縮略圖




            // this "resizedp_w_picpath" p_w_picpath is what you want to pass to setImage

            UIImage * resizedImage = [p_w_picpathresizedImage:p_w_picpathview.frame.sizeinterpolationQuality:kCGInterpolationLow];   //生成你想要尺寸的圖



    造成的問題,要注意縮放的比例,不要導致圖片變形,由于尺寸縮小,可能會導致圖片模糊,注意縮小的尺寸。



   綜上可見,每種方法有優點,有缺點。主要依據自己的開發情況,折中使用。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

凤庆县| 祁东县| 康马县| 孟津县| 遵义县| 西盟| 织金县| 云浮市| 紫金县| 咸宁市| 苏尼特右旗| 隆子县| 黄冈市| 太谷县| 名山县| 金寨县| 称多县| 霍林郭勒市| 桑日县| 江城| 海安县| 商洛市| 延边| 苏尼特左旗| 长葛市| 巴中市| 广东省| 水富县| 略阳县| 团风县| 绍兴县| 绍兴市| 鄂伦春自治旗| 安阳市| 铁岭市| 都昌县| 辽阳市| 玉屏| 湘潭市| 松原市| 南溪县|