UITableView是UIKit中最重要的一個組件之一,可以用來展示數據列表,也可以用來做頁面布局和開發(fā)專用組件。UITableView的使用遵循MVC模式,從而實現數據模型、視圖、控制器分離。UITableView繼承自UIScrollView,可上下滑動,可以作為根視圖,也可以作為子視圖。與UITableView相關的概念有很多:UITableViewController、UITableViewDelegate、UITableViewDataSource、UITableViewCell等等,下面是一些簡單的介紹。
UITableViewController繼承自UIViewController并遵循UITableViewDelegate和UITableViewDataSource兩個協(xié)議。
UITableViewDelegate遵循UIScrollViewDelegate和NSObject,提供一系列方法來自定義tableView的樣式。
UITableViewDataSource遵循NSObject,提供一系列方法來填充tableView的數據。
UITableViewCell的復用原理
在UITableViewController中創(chuàng)建UITableViewCell時常用到如下方法:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:<#@"reuseIdentifier"#> forIndexPath:indexPath];
其中的@“reuseIdentifier”就是一個復用標識符,是一個獨一無二的字符串,用來唯一標示某種重復樣式的UITableViewCell,提高加載效率。系統(tǒng)在創(chuàng)建足夠多的Cell后(覆蓋整個tableView),保存并重復這些Cell,避免重復創(chuàng)建和銷毀Cell。UITableView中有兩個數組用來實現這一機制:visiableCells和reuseableTableCells。前者用來保存當前屏幕可見的Cell,后者用來保存那些可以復用的Cell。
一個tableView是否可以關聯(lián)兩個datasource
可以??梢灾苯訉⒍鄠€數據源合并為一個數據源,也可以分別關聯(lián)。
如何對UITableView的滾動加載進行優(yōu)化
對UITableView的滾動優(yōu)化主要在以下兩個方面
減少cellForRowAtIndexPath中的計算量(cell的內容計算):
1、提前計算每個cell中用到的基本數據,調用時直接取出
2、異步加載圖片,之后再填入cell內部的UIImageView
3、圖片數量多時,圖片的尺寸需要經過transform矩陣變化壓縮好,或者只加載預覽圖。
4、圖片懶加載,避免滾動速度過快時頻繁請求數據
5、盡量手動Drawing視圖而不是直接使用UITableViewCell的子類。
減少heightForRowAtIndexPath的計算量(cell的高度計算):
1、如果cell高度固定,可以去掉HeightForRowAtIndex代理,直接設置tableView的rowHeight屬性作為固定高度
2、如果高度不固定,可以將cell的高度提前計算好存儲起來,代理調用時直接取。