关于UITableVIewCell在nib中复用的若干问题
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
One Nib One Cell
在 ViewDidLoad 里 [tableView registerNib:nib forCellReuseIdentifier:CellIdentifier];
然后就可以在 CellForRowAtIndexPath 里用 Cell *cell = (Cell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];