uitableviewcell中的图像减慢了滚动速度

时间:2012-11-23 12:28:33

标签: iphone objective-c ios ipad uitableview

我的tableview包含从服务器加载的图像,这会减慢我的tableview滚动速度。以下是我的代码。任何想法,请帮助我。

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


    CustomTblViewCellFacetoface *cell = (CustomTblViewCellFacetoface *) [tableView dequeueReusableCellWithIdentifier:@"cellA"];
    if  (cell == nil)
    {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomTblViewCellFacetofaceNib" owner:Nil options:nil];

        for (id currentObject in topLevelObjects)
        {
            if  ([currentObject isKindOfClass:[UITableViewCell class]])
            {
                cell =  (CustomTblViewCellFacetoface *) currentObject;

                break;
            }
        }
    }
    // configure cell

    IStructFacetofaceRequests *objappointmentdetails  =   [M_ArrFacetofaceRequests objectAtIndex:indexPath.row];   
    cell.selectionStyle                         =   UITableViewCellSelectionStyleNone;
    cell.backgroundColor                        =   [UIColor clearColor];
    cell.m_CtrllblName.text                     =   objappointmentdetails.m_strUsername;
    cell.m_CtrllblVenue.text                     =   [NSString stringWithFormat:@"Venue : %@",objappointmentdetails.m_strVenue];
    cell.m_CtrllblDate.text                     =   [NSString stringWithFormat:@"%@ - %@",objappointmentdetails.m_strStartDate,objappointmentdetails.m_strEndDate];
    [cell.m_CtrllblName setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]];
    [cell.m_CtrllblVenue setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]];
    [cell.m_CtrllblDate setTextColor:[UIColor colorWithRed:(113/255.f) green:(113/255.f) blue:(113/255.f) alpha:1.0f]];
    cell.m_CtrllblName.font=[UIFont fontWithName:@"Arial-BoldMT" size:16];
    NSData * imageData = [[NSData alloc] initWithContentsOfURL: [NSURL URLWithString: objappointmentdetails.m_strImageurl]];

    cell.m_CtrlImgViewUser.image=[UIImage imageWithData: imageData];
    [cell.m_CtrlBtnView addTarget:self action:@selector(MoveToNextView:) forControlEvents:UIControlEventTouchUpInside];
    cell.m_CtrlBtnView.tag=indexPath.row;

    return cell;

}

这是我在索引路径的cellfor行中使用的代码。

2 个答案:

答案 0 :(得分:1)

您可以使用UITableView延迟加载。

此处来自苹果的sample

你可以在github

看到这个项目

是的,UITableView是围绕延迟加载的假设而设计的。制作UITableView时,根本不加载任何条目。而是等待系统框架调用您的cellForRowAtIndexPath方法。对于需要加载的每个单元格,该方法被调用一次,这仅适用于当时可见的单元格。当用户滚动表格视图时,新单元格进入视图,并且每次进入视图的新单元格都会再次调用您的cellforRowAtIndexPath方法。

现在这是一般原则。但是,如果您的单元格由服务器中的数据填充,则还有一些其他注意事项。您可以将cellForRowAtIndexPath构造为尽可能地懒惰,并为进入视图的每个单元调用服务器。但网络延迟会使用户体验非常糟糕。因此,在UITableView中的单元格之外的数据结构中,提前缓冲大量数据单元的数据是有利的。这样,当cellForRowAtIndexPath被调用时,您将能够通过从缓冲数据构造单元格来快速提供单元格的内容。究竟要缓冲多少数据取决于每个数据元素的大小,以及应用程序在内存分配方面做了多少其他事情。另外,我认为在您的应用中缓冲500到1000个单元格的数据没有错。但是,不要将数据的缓冲与UITableView's排队和重用单元格混淆。没有理由保持大量的细胞准备就绪 - 只是进入这些细胞的数据。

答案 1 :(得分:1)

您可以使用异步加载来解决这个问题。 请仔细阅读本教程..

http://www.markj.net/iphone-asynchronous-table-image/