大部分的 iOS 開發(fā)應(yīng)該都清楚 UITableView 的 cell 重用機制,這種重用機制減少了內(nèi)存開銷也提高了 performance,UIScrollView 作為 UITableView 的父類,在很多場景中也很適合應(yīng)用重用機制(其實不只是 UIScrollView,任何場景中會反復(fù)出現(xiàn)的元素都應(yīng)該適當?shù)匾胫赜脵C制)。
你可以參照 UITableView 的 cell 重用機制,總結(jié)重用機制如下:
<li>維護一個重用隊列
<li>當元素離開可見范圍時,removeFromSuperview 并加入重用隊列(enqueue)
<li>當需要加入新的元素時,先嘗試從重用隊列獲取可重用元素(dequeue)并且從重用隊列移除
<li>如果隊列為空,新建元素
<li>這些一般都在 scrollViewDidScroll: 方法中完成
實際使用中,需要注意的點是:
<li>當重用對象為 view controller 時,記得 addChildeViewController
<li>當 view 或 view controller 被重用但其對應(yīng) model 發(fā)生變化的時候,需要及時清理重用前留下的內(nèi)容
<li>數(shù)據(jù)可以適當做緩存,在重用的時候嘗試從緩存中讀取數(shù)據(jù)甚至之前的狀態(tài)(如 table view 的 contentOffset),以得到更好的用戶體驗
<li>當 on screen 的元素數(shù)量可確定的時候,有時候可以提前 init 這些元素,不會在 scroll 過程中遇到因為 init 開銷帶來的卡頓(尤其是以 view controller 為重用對象的時候)