UITableView 重用cell两种方法的区别
2017-02-17 本文已影响465人
eileen01
重用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的。