iOS UITableViewCell 注册与重用

1 创建UITableView设置相关属性时注册

// xib cell注册
[tableView registerNib:[UINib nibWithNibName:NSStringFromClass([UITableViewCell class]) bundle:nil] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];

// 纯代码 cell注册
[tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:NSStringFromClass([UITableViewCell class])];

如果先注册了,那么tableView调用数据源方法tableView:cellForRowAtIndexPath:时就不用再注册,直接可以使用dequeueReusableCellWithIdentifier:forIndexPath:就会重用,其实我实验过用dequeueReusableCellWithIdentifier也是会重用的,但还是建议用前者,因为后者一般配合在tableView:cellForRowAtIndexPath:方法里面注册使用。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class]) forIndexPath:indexPath];
    return cell;
}

2 在数据源方法里面注册(适用于未能提前知道Identifier,如从接口获取的Identifier)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class])];
    // xib的cell注册
    if(cell == nil)
    {
        cell = [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([UITableViewCell class]) owner:self options:nil] firstObject];
    }
    // 纯代码的cell注册
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:NSStringFromClass([UITableViewCell class])];
    }
    return cell;
}

3 直接在xib cell里面注册

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:NSStringFromClass([UITableViewCell class]) forIndexPath:indexPath];
    NSLog(@"地址-----%p 第%ld行",cell, indexPath.row + 1);
    return cell;
}

你可能感兴趣的:(iOS UITableViewCell 注册与重用)