在英雄列表中动态生成cell的代码在中,
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 创建一个cell并且设置cell的风格
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:nil];
CZHero *hero = self.heros[indexPath.row];
cell.textLabel.text = hero.name;
cell.imageView.image = [UIImage imageNamed: hero.icon];
cell.detailTextLabel.text = hero.intro;
// 设置附属物风格
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.accessoryView = [UIButton buttonWithType:UIButtonTypeContactAdd];
cell.selectionStyle = UITableViewCellSelectionStyleBlue;
return cell;
}
因为这个方法是被不停调用的,设想如果有成千上万的cell对象或者列表被拉动了很多次的话,就会生成数量庞大的cell对象。这样的话就会严重消耗iOS设备的内存。
还有一个非常重要的问题:有时候需要自定义UITableViewCell(用一个子类继承UITableViewCell),而且每一行用的不一定是同一种UITableViewCell,所以一个UITableView可能拥有不同类型的UITableViewCell,对象池中也会有很多不同类型的UITableViewCell,那么UITableView在重用UITableViewCell时可能会得到错误类型的UITableViewCell
1.重用原理:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
// 1.定义一个cell的标识
static NSString *ID = @”cell";
// 2.从缓存池中取出cell
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
// 3.如果缓存池中没有cell
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
}
// 4.设置cell的属性...
return cell;
}