关于UITableVIewCell在nib中复用的若干问题

发布于 2022-09-01 12:47:01 字数 1318 浏览 26 评论 0

http://www.tuicool.com/articles/67bYri

解释:
1.在上边这个贴子里一共放了三段代码,后两段是nib加载UITableViewCell的。
2.我平常使用的就是帖子中的第二种,今天发现,cell压根没定义id,复用不成(详情见帖子对第二段代码的分析)。当然,在nib文件里边直接给把id填上也是可以的,但是这种常常会忘记定义(毕竟不在nib中定义id也不会报错)。
3.所以准备用第三段代码,当然 BOOL nibsRegistered = NO 得改成 static BOOL nibsRegistered = NO,这问题我也知道,要不然也复用不成功;

问题:
1.第三种,如果我nib中有很多个cell怎么破?毕竟这种取法是不传索引的,但是我平常会在同一个类里定义多个样式的cell
2.他这种nibsRegistered的写法也不是很稳妥吧?我看了下UINib这对象,说是会预加载进内存,然后创建的时候,会获取此对象并初始化,在内存充足的时候这个是没有问题的,但是当内存不足的时候,会释放掉此UINib,导致nibsRegistered = Yes,但是tableview注册的UINib已经被释放了,就会创建cell失败。
ps:第二个问题条件不允许,所以我没有去实践,只是我的猜想,如果我的猜想正确,烦请您告诉我解决办法,如果不正确,请告诉我我哪里想得不正确,谢谢。

附上第三段代码
static NSString *CellIdentifier = @"Cell";
    BOOL nibsRegistered = NO;
    if (!nibsRegistered) {
        UINib *nib = [UINib nibWithNibName:NSStringFromClass([Cell class]) bundle:nil];
        [tableView registerNib:nib forCellReuseIdentifier:CellIdentifier];
        nibsRegistered = YES;
    }
    Cell *cell = (Cell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    cell.titleLabel.text = [self.dataList objectAtIndex:indexPath.row];
    return cell;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

往日情怀 2022-09-08 12:47:01

One Nib One Cell

在 ViewDidLoad 里 [tableView registerNib:nib forCellReuseIdentifier:CellIdentifier];

然后就可以在 CellForRowAtIndexPath 里用 Cell *cell = (Cell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文