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的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容