2010-03-14 91 views
0

由于我的应用程序要求,我显示在UITableView中的联系人图像如下所示。UITableView与联系人图像问题

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath 
                   (NSIndexPath *)indexPath 
{ 
    //NSMutableArray *sourceArray = sourceList; 
    static NSString *identifier = @"CellIdentifier"; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier]; 
    if (cell == nil) 
    { 
     //If not possible create a new cell 
     cell = [[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault      
      reuseIdentifier:identifier] autorelease]; 
     cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 
     cell.opaque = NO; 

     CGRect LabelFrame = CGRectMake(130, 33, 150, 13); 
     callImage = [[UIImageView alloc] initWithFrame:LabelFrame];//phone image 
     callImage.tag = 1; 
     [cell.contentView addSubview:callImage]; 
     [callImage release]; 
      ----- 
      ----- 
    } 
    UIImageView *callImage = (UIImageView *)[cell viewWithTag:1]; 
    ABRecordRef contact = [self getContact]; 
    if(contact && ABPersonHasImageData(contact)) 
    { 
     UIImage *contactImage = [UIImage imageWithData:(NSData*)ABPersonCopyImageData(contact)]; 
     callImage.image = contactImage; 
    } 
} 

我有两个问题,如果我用上面的代码段。

  1. 表滚动速度太慢。如果评论“图像添加”代码,那么UITable响应速度非常快。
  2. 内存管理。我的应用程序开始使用25 - 30 MB的RAM。

有没有更好的方法可以避免上述两个问题?

+0

你能发布你的cellForRowAtIndexPath方法的完整代码吗?你的问题可能是你没有正确地重用你的单元格 – Vladimir 2010-03-14 09:26:23

+0

是的,我正在以适当的方式重用它们。无论如何,我发布在我的上述问题本身。 – prathumca 2010-03-15 14:46:37

回答

1

“添加图像”代码中存在内存泄漏。 ABPersonCopyImageData返回保留NSData对象,你需要释放你使用它后初始化的UIImage,像这样:一旦你已经解决了泄漏

NSData *contactImageData = (NSData*)ABPersonCopyImageData(contact); 
UIImage *contactImage = [UIImage imageWithData:]; 
[contactImageData release]; 

,图像数据可以被释放,只要相应的表格单元格滚动关闭屏幕。这应该可以解决你的记忆和性能问题。

+0

我已经试过了。但没用 – prathumca 2010-03-16 04:16:11

0

预先缓存图像如何?如果您为每个单元访问Adressbook-Subsystem,可能会出现问题? 另一个问题可能是imageWithData调用,因为每次都必须从头开始构建图像。这里没有图像缓存。如果在构建表之前执行此操作(使用此方法访问cellForRow)并将预渲染的图像存储在带有ABRecordID键的NSMutableDictionary中?