dequeueReusableCellWithIdentifier如何工作?
我想要一些关于dequeueReusableCellWithIdentifier:kCellIdentifier
精确度dequeueReusableCellWithIdentifier:kCellIdentifier
。 如果我理解的很好,下面的NSLOG应该只打印一次。 但事实并非如此。 那么dequeueReusableCell有什么意义呢? 它是只有自定义单元格有效吗?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *kCellIdentifier = @"UITableViewCellStyleSubtitle3"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:kCellIdentifier]; if (cell == nil) { NSLog(@"creation of the cell"); cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:kCellIdentifier] autorelease]; } cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; cell.textLabel.text = [[self.table objectAtIndex:indexPath.row] objectForKey:kTitleKey]; [cell setBackgroundColor:[UIColor colorWithWhite:1 alpha:0.6]]; return cell; }
开始滚动你的tableview,你应该看到日志消息不再出现。
如果您有一个高度为1000像素的桌面视图,并且每个单元格的高度为100像素,则会看到11次日志消息。
因为11是同时可见的单元格的最大数量。
它是11而不是10,因为当你向下滚动一点时,将会有9个完全可见的单元格和2个只能部分可见的单元格。
它只在初始化的单元格离开屏幕时才起作用。
例如,假设你有一个表格视图,在屏幕上显示十个单元格,但总共有一百行。 当视图第一次加载并填充表视图时,十个单元格将被初始化( 因此多个 NSLog
语句 )。 当您开始向下滚动时,从屏幕顶部消失的单元格被放置到重用队列中。 当需要绘制从底部出现的新单元时,它们将从重用队列中出列,而不是初始化新实例,从而减less内存使用量。
这也是为什么在if (cell == nil)
条件之外configuration你的单元的属性是很重要的。
- iOS:如何在popup其子UIViewController后“刷新”UIViewController?
- 如何隐藏SafariViewController中的完成button和search栏
- 安全的方式来渲染UIVIew后台线程上的图像?
- iOS中的背景获取和背景传输可以在bakcground上下载数据(JSON)
- 在两台iOS设备之间通过bonjourstream式传输图像
- configuration应用程序时发生Firebase错误 – 无法识别的select器已发送到课程
- 在iOS中禁用日文键盘的汉字自动完成(henkan)?
- JavaScriptCore – 将函数作为parameter passing给ObjC
- IOS,ARC,属性:(readwrite,nonatomic)vs(radwrite,retain,nonatomic)