iOS性能優化——重用的藝術

前言

本文主要是講對UITableView以及UICollectionView的一些使用場景和注意事項,如何利用UITableViewCell和UICollectionViewCell的重用去提升APP的交互體驗。

一、問題來源

最近在對我們的應用進行一些性能上的優化,發現其中一個圖片預覽界面在添加的圖片數量較多時十分卡頓,於是開始查找原因,發現實現方案存在問題——沒有展示在界面的圖片視圖也會創建,沒有想到重用,每次加載時都會創建新的一個視圖。

二、具體場景及現有方案問題描述

1.場景

假設需要展示一些圖片的縮略圖,圖片分爲m組,每組有n張圖片。

示意圖1:

場景描述示意圖

2.當前方案

整體使用UITableView進行展示,每一個UITableViewCell展示一組圖片,每個UITableViewCell內部使用UIScrollView作爲容器,將一組的圖片進行展示。
其中UITableView使用了cell的重用,但是UIScrollView內每次使用時都會重新創建對應圖片個數的item。

示意圖2:

當前方案示意圖

3.問題

這種實現在圖片數量較多時,每次滾動列表時,都會頻繁的創建對應數量的item,不僅耗費性能,而且沒有顯示的item創建還會佔用大量的內存。

三、解決方案

這種場景下可以替換UIScrollView爲UICollectionView,即每個UITableViewCell中添加一個UICollectionView來展示單個小組的圖片,圖片數量多時,沒有展示的部分圖片就會利用UICollectionView的重用機制被放回到重用池,需要展示時只需要取出並刷新UI就可以了。
這時圖片增長不僅不會大量增加內存損耗,也不會因爲頻繁的創建而耗費內存了。

四、部分測試數據對比

修改前後使用xcode core animation工具在圖片共4組,每組55張情況下的FPS數據:
注:上爲修改後,下爲修改前。處於交互(點擊、輕掃等事件觸發)狀態下FPS值越接近60,界面卡頓越輕微。
FPS時間數值表
FPS柱狀圖、CPU使用折線圖

發佈了42 篇原創文章 · 獲贊 21 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章