1

我使用 uitableView 创建了一种 GRID。为此,我采用了各种标签来显示我正在使用线条图像的网格类型线条。因此,通过考虑 Grid,我的 tableview 大约有 88 列。

我的问题是当我向下滚动时,我得到了生涩的效果。它的性能很差。我正在创建大约 108 个标签,每行有 88 个标签和 86 个图像视图。

我需要遵循什么步骤来提高滚动性能???

我使用 clearColor 作为标签背景。但后来我删除了那些背景颜色。

4

2 回答 2

0

您需要为表格单元格提供重用标识符。否则,每次创建一个全新的单元格并消耗越来越多的内存。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    static NSString *const kReuseIdentifer = @"ReuseIdentifer";

    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
       cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:kReuseIdentifier] autorelease];
    }

    return cell;
}
于 2012-07-10T09:56:37.273 回答
0

再次阅读您的问题后,我认为您正在使用非常宽的表格视图水平和垂直滚动。如果是这种情况,那么您需要切换到 UIScrollView 并将每个项目附加到此视图。UIScrollView 只会加载可见的视图并提供您想要的滚动性能。

避免这种情况很重要:

// Using ARC, therefore no release on the UILabel
- (void) viewDidLoad {
    self.scrollView.backgroundColor = [UIColor whiteColor];

    UIFont *font = [UIFont systemFontOfSize:24]; 
    CGSize size = [@"10000:10000" sizeWithFont:font];

    _scrollView.contentSize = CGSizeMake(10000 * size.width, 10000 * size.height);

    for (int y = 0; y < 10000; y++) {
        for (int x = 0; x < 10000; x++) {
            NSLog(@"Loading: %d, %d", x, y);
            UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(x * size.width, y * size.height, size.width, size.height)];
            label.font = font;
            label.textAlignment = UITextAlignmentRight;
            label.text = [NSString stringWithFormat:@"%d:%d", x, y];
            [_scrollView addSubview:label];
        }
    }
}

虽然这最终会加载,但加载所有这些标签需要很长时间,并且会消耗大量内存。你想像 TableView 一样延迟加载这个视图。今天晚上我会写一个例子。

于 2012-07-10T10:21:04.147 回答