UITableView 重用cell两种方法的区别

重用cell的两种方法

- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier;  
- (id)dequeueReusableCellWithIdentifier:(NSString *)identifier forIndexPath:(NSIndexPath *)indexPath NS_AVAILABLE_IOS(6_0);

两种方法均是在 tableView:cellForRowAtIndexPath:方法中使用。区别在于
第一种方法 dequeueReusableCellWithIdentifier,如果没有复用cell,程序可能会返回nil, 所以创建完cell后必须要做判空处理,如下:

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:identifier];   
if (cell == nil) {
    //初始化cell
   cell  = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:identifier];
}

第二种方法dequeueReusableCellWithIdentifier:forIndexPath:必须和register方法配套使用

- (void)registerNib:(UINib *)nib forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(5_0);  
- (void)registerClass:(Class)cellClass forCellReuseIdentifier:(NSString *)identifier NS_AVAILABLE_IOS(6_0);

tableView先使用上述方法中任何一种注册cell

[_tableView registerClass:[CustomCell class] forCellReuseIdentifier:kCellIdentify];

然后在tableView:cellForRowAtIndexPath:中使用dequeueReusableCellWithIdentifier:forIndexPath:获取重用的cell,如果没有重用的cell,将自动使用提供的class类创建cell并返回

CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentify forIndexPath:indexPath]; 

此后再无需判断cell == nil 的情况。获取cell时如果没有可重用的cell,将自动调用cell中的initWithStyle:withReuseableCellIdentifier:方法创建新的cell。即用此方法创建的cell一定是不为nil的。

你可能感兴趣的:(UITableView 重用cell两种方法的区别)