10(四)UITableView的cell高度緩存

1為什么

因?yàn)楫?dāng)tableView滾動時會不停的回調(diào)- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;這個代理方法,當(dāng)cell的高度需自適應(yīng)內(nèi)容時,就意味著每次回調(diào)這個方法時都要計(jì)算高度,而計(jì)算是要花時間了,在用戶體驗(yàn)上的體現(xiàn)就是卡頓。為了避免重復(fù)且無意義的計(jì)算cell高度,緩存高度就顯得尤為重要了。

2怎么

緩存高度需要一個可變數(shù)組,每當(dāng)回調(diào)- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath;這個方法時,我們先去這個數(shù)組里去取,如果有,就直接拿出來,如果沒有,就計(jì)算高度,并且放進(jìn)數(shù)組。

刷新tableView時記得清空高度緩存數(shù)組

3總結(jié):get


4 一行cell要展示在屏幕上,至少要執(zhí)行5遍TableView的heightForRowAtIndexPath方法:

TableView配置部分:

① 當(dāng)TableView視圖即將展現(xiàn)在屏幕上時,會把所有行的行高數(shù)據(jù)進(jìn)行拉取。

②當(dāng)TableView在執(zhí)行setLayoutMargins方法進(jìn)行自身布局時會把所有行高數(shù)據(jù)進(jìn)行拉取。

③TableView在執(zhí)行l(wèi)ayoutSubViews方法進(jìn)行子視圖布局時會再次把所有行高數(shù)據(jù)進(jìn)行拉取。

TableViewCell配置部分:

④當(dāng)使用cellID進(jìn)行與TableView綁定的cell獲取時會拉取本行cell的高度數(shù)據(jù)。

⑤當(dāng)cell進(jìn)行l(wèi)ayoutSubViews方法進(jìn)行布局時會再次拉取本行cell的高度數(shù)據(jù)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容