【发布时间】:2011-02-03 21:18:39
【问题描述】:
我会交替使用 2 种颜色的行,例如第一个黑色、第二个白色、第三个黑色等...
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
cell = ((MainCell*)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]);
if (cell==nil) {
NSArray *topLevelObjects=[[NSBundle mainBundle] loadNibNamed:@"MainCell" owner:self options:nil];
for (id currentObject in topLevelObjects){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
if ((indexPath.row % 2)==0) {
[cell.contentView setBackgroundColor:[UIColor purpleColor]];
}else{
[cell.contentView setBackgroundColor:[UIColor whiteColor]];
}
cell = (MainCell *) currentObject;
break;
}
}
}else {
AsyncImageView* oldImage = (AsyncImageView*)
[cell.contentView viewWithTag:999];
[oldImage removeFromSuperview];
}return cell;
问题是,当我快速滚动时,单元格的背景变得像最后 2 个单元格黑色,前 2 个单元格白色或类似的东西,但如果我滚动缓慢工作正常。 我认为问题在于reusableCell的缓存。
有什么想法吗?
TIA
【问题讨论】:
-
如果您将 CellIdentifier 设置为字符串文字,请不要将其设为静态
-
@Jared P:将指向字符串文字的指针设为静态并没有错。
-
我仍然认为在 java 中!..但是对于我所知道的静态标识符,对象的值在第一次分配时保持不变......
-
@Mat:是的,它将在函数的自动范围之外分配。在这种情况下,它可能无关紧要,但使用 static 并没有什么问题,而且它无论如何都在 Apple 样板中使用。
-
我相信在这种情况下将其设为静态可以加快速度。在出队代码中,当比较重用标识符的相等性时,如果使用静态字符串,则指针将匹配,这意味着它不必继续进行更昂贵的字符串比较。这可能是一个微不足道的好处,但我敢打赌这就是他们这样做的原因。
标签: ios objective-c uitableview cocoa-touch cell