UITableView的cell重用优化

三种情况,四种方法:

情况一:加载xib中描述的cell

情况二:加载纯代码自定义的cell

情况三:加载storyBoard中的tableView内的cell

 

针对于情况一:

// 导入自定义cell的.h文件,在viewDidLoad方法中注册xib中描述的cell,因为只需要注册一次,所以选择在viewDidLoad方法中注册
#import "WSUserCell.h"

- (void)viewDidLoad {

[self.tableView registerNib:[UINib nibWithNibName:NSStringFromClass([WSUserCell class]) bundle:nil] forCellReuseIdentifier:WSUserCellId];

}

针对于情况二:

// 方法一:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"carID";
    UITableViewCell *carCell = [tableView dequeueReusableCellWithIdentifier:ID];
    if (carCell == nil) {
        carCell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
    }

    WSCarGroups *carGroup = self.arrayModel[indexPath.section];
    WSCars *car = carGroup.cars[indexPath.row];
    
    carCell.textLabel.text = car.carName;
    carCell.imageView.image = [UIImage imageNamed:car.carIcon];
    
    return carCell;
}
// 方法二:

- (void)viewDidLoad {
// 注册 
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:ID];

}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *ID = @"carID";
    UITableViewCell *carCell = [tableView dequeueReusableCellWithIdentifier:ID];
// 因为已经注册过这个cell类,所以就不用写这句代码
// if (carCell == nil) { // carCell =[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID]; // } WSCarGroups *carGroup = self.arrayModel[indexPath.section]; WSCars *car = carGroup.cars[indexPath.row]; carCell.textLabel.text = car.carName; carCell.imageView.image = [UIImage imageNamed:car.carIcon]; return carCell; }

 针对于情况三:

即不需要注册,也不需要在- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath中判断cell是否为空,系统会自动加载storyBoard中指定reuseIdentifier的cell

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.tableView.rowHeight = 70;
    // 千万不要注册,因为注册的优先级大于storyBoard,一旦注册就不会加载storyBoard中的cell
//    [self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"tg"];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (indexPath.row % 2 == 0) {
        static NSString *ID = @"tg";
        XMGTgCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
        
        cell.tg = self.tgs[indexPath.row];
        
        return cell;
    } else {
        return [tableView dequeueReusableCellWithIdentifier:@"test"];
    }
}

如下图,为storyBoard中给cell绑定的reuseIdentifier:

 

posted @ 2015-10-05 16:38  oneSong  阅读(524)  评论(0编辑  收藏  举报