最近沒有來寫遇骑,一是沒想好寫什么;二是因為趕項目池颈。今天有個同事突然問到UITableView有哪些可以優(yōu)化的地方。首先想到UITableView的懶加載钓丰,想來這個可以寫一下躯砰。
因為我們經(jīng)常會用UITableView和UICollectionView來實現(xiàn)圖文列表的方式來展示。那么隨著加載的數(shù)據(jù)和滑動的頻率携丁,這個時候就需要考慮到性能問題了琢歇,隨著現(xiàn)在的硬件性能越來越好,有時候測試時可能出現(xiàn)不了卡頓的情況梦鉴,但是并不代表你的代碼沒問題李茫。首先滑動的頻率很快的時候,數(shù)據(jù)不停的加載肥橙,圖片通過多線程來實現(xiàn)異步加載魄宏,那么這里的開銷是會很大的。如何減少這種開銷呢存筏?懶加載宠互,意味著我只需要顯示當前滑動停止時當屏的數(shù)據(jù)即可味榛,快速滑動過去的數(shù)據(jù)我可以不用加載圖片。
那么懶加載的核心關鍵就在于要明白UIScrollView的幾個代理方法予跌,這篇重點講一下這幾個代理方法和調(diào)用順序:
//用于開始拖動的時候
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;
//contentOffset發(fā)生變化時會被調(diào)用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView;
//用于將要結束拖動的時候搏色,當你將要結束拖動的時候,系統(tǒng)已經(jīng)計算好了targetContentOffset券册,此時系統(tǒng)已要計算出滑動結束后將會停在哪里频轿。
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset;
//用于已經(jīng)結束拖動的時候,decelerate 為 YES 時烁焙,結束拖動后會有減速過程略吨。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;
//減速動畫開始前調(diào)用
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView; // called on finger up as we are moving
//減速動畫結果時調(diào)用,可以用于判斷滑動是否停止
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;
理解了上面UIScrollView的幾個代理方法和調(diào)用順序考阱,我們下一篇開始講如何實現(xiàn)UITableView的懶加載。