uitableViewcell中的UIImage减慢滚动表

时间:2011-06-20 08:13:14

标签: iphone objective-c ios uitableview uiimageview

你好我想在Table的cell.image中获取facebook用户的个人资料图片。但它减慢了表格视图的滚动。然后我使用了Asynchronous loading of image链接但是我很困惑如何在表格的方法中使用它

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"Cell";

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

        cell.textLabel.font = [ UIFont fontWithName:@"Arial" size:10.0];
        cell.textLabel.numberOfLines = 0;

        cell.textLabel.text = [NSString stringWithFormat:@"%@",[(Facebook *)[dummyArray objectAtIndex:indexPath.row] sender]];

        cell.detailTextLabel.text =[NSString stringWithFormat:@"%@",[(Facebook *)[dummyArray objectAtIndex:indexPath.row] post]];

        NSString *get_string = [NSString stringWithFormat:@"%@/picture",[(Facebook *)[dummyArray objectAtIndex:indexPath.row]senderId]];

        AsynchronousImageView *image = [[AsynchronousImageview alloc]init];
[image loadImagewithUrlString:getString];

        FbGraphResponse *fb_graph_response = [fbGraph doGraphGet:get_string withGetVars:nil];

        UIImageView *image_view = [[UIImageView alloc] initWithImage:fb_graph_response.imageResponse];


        cell.imageView.image = image_view.image;



        [image_view release];


        return cell;
    }

3 个答案:

答案 0 :(得分:4)

由于每次调用image时都设置cellForRowAtIndexPath:,因此速度变慢。仅在if (cell == nil)块内添加图像到单元格的imageView。然后你会看到滚动的改进。

答案 1 :(得分:0)

    AsynchronousImageView *image = [[AsynchronousImageview alloc]init];
    [image loadImagewithUrlString:getString];

    FbGraphResponse *fb_graph_response = [fbGraph doGraphGet:get_string withGetVars:nil];

    UIImageView *image_view = [[UIImageView alloc] initWithImage:fb_graph_response.imageResponse];


    cell.imageView.image = image_view.image;

此代码正在创建所描述的问题.....尝试此approch ...一旦下载任何图像,将其保存在文档目录中的任何临时文件夹中(创建您的图像的名称,以便您可以唯一地识别它们中的每一个)....当你必须配置单元格时,每次调用方法celForRowAtIndexPath时,只需从临时文件夹中获取图像....不要使用

   UIImageView *image_view = [[UIImageView alloc];

由于你没有使用它(你只是使用它的.image属性),所以这里没有任何意义....如果可能的话,以这种方式收集viewDidLoad中的所有数据你可以进一步提高绩效

答案 2 :(得分:0)

您确定是异步图像导致问题吗?注释异步图像部分,看看它可能是FbGraphResponse部分的实际原因。

我发现您每次都会为图表响应创建一个图像,这会导致速度变慢。