【发布时间】:2011-02-11 00:06:37
【问题描述】:
我最近调试了一个视图控制器的问题,并注意到每次我向上或向下拖动视图时,它都会重新绘制我的 UITableView 的全部内容(因为它每次都会调用 cellForRowAtIndexPath 方法)。是否可以使用内存数据源或向我的视图控制器添加另一个委托,这样它就不会每次都重新绘制?
当用户与单元格交互时,我不会修改单元格内的任何内容,因此在调用初始“viewDidLoad”后,我的数据源将是静态的。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if ([self.hats count] > 0) {
//do some complex stuff in here that hurts each time we re-draw this ...
}
return cell;
}
提前谢谢你
【问题讨论】:
-
贴出复杂东西的代码。不保存单元格。一旦它们离开屏幕,它们就会进入再利用箱,当它们变得可见时,它们必须被重新绘制。
-
我没有完整的 src 但基本上我创建了一个 UIView 并将其添加到单元格的子视图中。但在这一步之前,我向 UIView(动态)添加了一些其他控件,然后将它们全部释放。重新加载这些只是感觉很痛苦。认为这样的静态数据源可能存在委托或技术以避免性能命中
-
你看,这就是问题所在。所有添加内容的子视图都进入 if (cell == nil) { // here }。如果操作正确,您可以添加数十个视图而不会影响性能
-
我想说应该进入 if (cell==nil)...