数据对接:
/**
* cell数据回调
*/
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *identifier = @"identifier";
// 自制cell组件
AccountCell *cell = [[AccountCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
/** 多数据源分开对接:**/
// 头像
[cell.avatar setImage:[UIImage imageNamed:_url_datasource[indexPath.row]]];
// 姓名
cell.name.text = _name_datasource[indexPath.row];
// 或者:
/** 数据源合并后对接**/
// 取出对应数据模型
Model *model = _datasource[indexPath.row];
// 头像
[cell.avatar setImage:[UIImage imageNamed:model.url]];
// 姓名
cell.name.text = model.name;
return cell;
}
如何对UITableView的滚动加载进行优化,防止卡顿?
UITableView的滚动优化主要在于以下两个方面:
减少cellForRowAtIndexPath代理中的计算量(cell的内容计算) 减少heightForRowAtIndexPath代理中的计算量(cell的高度计算)

减少cellForRowAtIndexPath代理中的计算量
首先要提前计算每个cell中需要的一些基本数据,代理调用的时候直接取出; 图片要异步加载,加载完成后再根据cell内部UIImageView的引用设置图片; 图片数量多时,图片的尺寸要跟据需要提前经过transform矩阵变换压缩好(直接设置图片的contentMode让其自行压缩仍然会影响滚动效率),必要的时候要准备好预览图和高清图,需要时再加载高清图。 图片的‘懒加载'方法,即延迟加载,当滚动速度很快时避免频繁请求服务器数据。 尽量手动Drawing视图提升流畅性,而不是直接子类化UITableViewCell,然后覆盖drawRect方法,因为cell中不是只有一个contentview。绘制cell不建议使用UIView,建议使用CALayer。原因要参考UIView和CALayer的区别和联系。减少heightForRowAtIndexPath代理中的计算量
由于每次TableView进行update更新都会对每一个cell调用heightForRowAtIndexPath代理取得最新的height,会大大增加计算时间。如果表格的所有cell高度都是固定的,那么去掉heightForRowAtIndexPath代理,直接设置TableView的rowHeight属性为固定的高度; 如果高度不固定,应尽量将cell的高度数据计算好并储存起来,代理调用的时候直接取,即将height的计算时间复杂度降到O(1)。例如:在异步请求服务器数据时,提前将cell高度计算好并作为dataSource的一个数据存到数据库供随时取用。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。










