关于自定义cell的两种方式,我之前写过这篇博客,当时并不懂复用以及创建时一些代码的实际意思,导致之后我自己用的时候经常性的漏掉一句,现在我有点理解了,来写一下,也算对当时这篇博客的完善。
首先我们看不用创建文件的第一种自定义cell的方式
UITableViewCell *cell1 = [tableView dequeueReusableCellWithIdentifier:@"cell1"];// 1
if (cell1 == nil) {
cell1 = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cell1"]; // 2
}
return cell1
- 首先我们是根据复用标识符“cell1”从TableView的复用池去找有没有可以复用的cell
- 这里解释一下复用是什么,假如一个屏幕最多可以显示10个cell,第一个cell划上去看不到了,那么这个cell就会加入TableView的复用池中,等屏幕下方要滑出新的cell的时候,直接把消失的第一个cell重新显示在底部,这时整个TableView只需创建10个cell
- 因此我们第二步是先判断是否cell1 == nil,如果是nil,就是说没有,要新建一个
然后我们来看第二种方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
MusicTableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:@"musicCell"forIndexPath:indexPath]; // 1
return cell; // 2
}
- 这里我们没有在判断if (cell == nil)了,原因是仔细看这个函数比上面那个函数多了一个forIndexPath:indexPath,因此不需要再次进行判断了,当然,前面的注册绝对不能忘
- 如果想知道具体原因的,可以看这篇博客