UITableView的性能优化

来源:互联网 发布:淘宝售后客服工作表格 编辑:程序博客网 时间:2024/04/23 17:11



使用UITableViewController:

继承了UITableViewController的优点:
1在UITableViewController的内部,系统已经自动创建了一个tableView对象.
2并且自动设置以下的代码:
//设置控制器的view
self.view = tableView;
//设置控制器的tableView属性
self.tableView = self.view;
//设置tableView的数据源
self.tableView.dataSource = self;
//设置tableView的代理
self.tableView.delegate = self;

使用UITableViewController的缺点:
1不利于添加工具条.
2如果使用tableView的tableHeaderView属性添加工具条时,拖动时发现工具条也被拖走了.


性能问题:
1当表格中的单元格进入屏幕时,就会调用数据源的-tableView:cellForRowAtIndexPath:方法,在方法内部创建一个cell对象,系统得到对象后会自动对cell做一次retain操作.
2当表格中的单元格完全退出屏幕时,系统又会调用cell对象的release方法,将对象销毁.
3对象cell的创建和销毁,都是由于表格的滚动而发生的,当表格快速滚动时,在短时间内将创建和销毁大量的cell对象,系统将会很卡.

解决方案:
只创建可视屏幕个cell对象,并对这些对象进行重用.

cell重用代码:
//static可以让ID只初始化一次
static NSString *ID = @"MyCell";
//先到缓存池里查找,看有没有可循环利用的cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
//如果没有,就自己创建一个新的cell
if(cell == nil)
{
    cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]autorelease];
}
//覆盖原来的数据
cell.textLabel.text = self.mydata[indexPath.row];
...
//覆盖原来的状态(比如是否打勾)
...
return cell;

0 0
原创粉丝点击