UITableview与图像滚动非常慢

时间:2011-12-23 12:49:16

标签: iphone ios scroll

我有一个UITableView,可以从服务器下载其tableviewcells图像。

我观察到表格滚动得很慢。

我认为这可能是由于下载造成的,但我已经意识到下载完成后表格仍然滚动速度很慢,而且图片图标尺寸非常小。

代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    btnBack.hidden = FALSE;

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;

        /////////////////////   Cell other accessories    /////////////////////
        cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        cell.backgroundColor = [UIColor clearColor];
//        cell.backgroundView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"list_1.jpg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0]];
//        cell.selectedBackgroundView = [[UIImageView alloc] initWithImage:[[UIImage imageNamed:@"list_2.jpg"] stretchableImageWithLeftCapWidth:0.0 topCapHeight:5.0]];

        /////////////////////   Cell Title    /////////////////////
        cell.textLabel.font = [UIFont fontWithName:@"Noteworthy" size:17.0];
        cell.textLabel.font = [UIFont boldSystemFontOfSize:17.0];
        cell.textLabel.textColor = [UIColor blackColor];
        cell.textLabel.highlightedTextColor = [UIColor blackColor];


    }

        /////////////////////   Cell Title    /////////////////////
        cell.textLabel.text = [NSString stringWithFormat:@"     %@", [test.arrTitle objectAtIndex:indexPath.row]];


        /////////////////////   Cell Image    /////////////////////


        NSString *Path;
        Path = [NSString stringWithFormat:@"http://%@",[test.arrImages objectAtIndex:indexPath.row]];
        NSLog(@"image-->%@",[test.arrImages objectAtIndex:indexPath.row]);
        NSString *strImage = Path;
        NSURL *url4Image = [NSURL URLWithString:strImage];    
        NSData *data = [NSData dataWithContentsOfURL:url4Image];
        image =[[UIImage alloc] initWithData:data];
        cell.imageView.image =image;
        [image release];

        return cell;
}

6 个答案:

答案 0 :(得分:8)

您应该使用NSOperationQueue来处理延迟加载的图像和自定义的tableviewcell 谷歌为tweetie定制tableviewcell 这应该让你朝着正确的方向前进。

Apple有一个用于在tableViews中下载图像的示例项目:LazyTableImages

答案 1 :(得分:1)

也许你的list_bg_01.png形象很大?这种方法占用了大量内存,只有当patternimage真的很小而且简单时才应该使用它,在其他条件下最好使用UIImageView将图像作为背景视图。

答案 2 :(得分:1)

您是否在代码上运行了探查器? 正如Nik burns所提到的,你应该使用GCD或NSOperation异步加载来自网络的图像。 您可以观看NAVperation的哈佛iTunesU视频:它将为您提供一个清晰的示例,并提供很好的解释。

你一定要运行探查器,看看你花费的时间最多。具有少量图像的单元格应该快速加载。

请注意,在初始化时可以在单元格上执行的某些操作(例如在单元格上设置背景颜色)如果反复执行这些操作,可能会导致很多性能损失。

如果您的单元格有特殊的布局,则应该为UITableViewCell创建子类并实现layoutSubviews方法(不要忘记调用super)。在tableViewDataSourceDelegate中做很多工作(并像你一样强制重新布局)可能效率很低。

但是再次:运行探查器

答案 3 :(得分:1)

我遇到了同样的问题,并且通过不使用cornerRadius属性进行了更正。然后我们使用了单元格形式的背景图像。

答案 4 :(得分:0)

我想知道为什么要在viewcell代码中创建你的图像。你不能为整个班级创建一次,然后根据需要将它放入UIView吗?

答案 5 :(得分:0)

配置所有一般外观应该在     if(cell == nil){} 只有设置标题等独特的东西才应该在外面。 此外,如果您的单元格的背景很简单(例如渐变),请使用QuartzCore绘制它或使用CAGradientLayer作为contentView图层的子图层。