设置UITableViewCell自定义png背景

时间:2011-05-10 11:22:04

标签: iphone memory uitableview memory-management

我正在改变UITableViewCellStyleSubtitle的背景:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    [...]
    NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"bgCellNormal" ofType:@"png"];
    cell.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:imagePath]] autorelease];
    [...]
    return cell;
}

我想知道如果没有使用这么多的alloc和autorelease有更好的方法吗? 我的观点是在这些uitableview中优化内存!

感谢您的帮助!

Kheraud

4 个答案:

答案 0 :(得分:7)

您不应从backgroundView访问或设置tableView:cellForRowAtIndexPath:属性。框架可能还没有实例化它,它可能会在你的脚下取而代之。在这方面,分组和普通表格视图的行为不同,因此任何新的未来风格也可能不同。

应在tableView:willDisplayCell:forRowAtIndexPath:中设置& /自定义背景视图。在第一次显示调用之前调用此方法。如果您愿意,可以使用它完全替换背景。我实际上做了这样的事情:

-(void)  tableView:(UITableView*)tableView 
   willDisplayCell:(UITableViewCell*)cell 
 forRowAtIndexPath:(NSIndexPath*)indexPath;
{
    static UIImage* bgImage = nil;
    if (bgImage == nil) {
        bgImage = [[UIImage imageNamed:@"myimage.png"] retain];
    }
    cell.backgroundView = [[[UIImageView alloc] initWithImage:bgImage] autorelease];
}

答案 1 :(得分:2)

如果您正在使用reuseIdentifier重用该单元格,那么您将不会真正分配内存这么多次。

此外,如果您的png文件已添加到项目中,则可以调用[UIImage imageNamed:@“bgCellNormal.png”。

UIImage imageNamed函数缓存图像以提供优化。

答案 2 :(得分:0)

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    [...]
    UIImageView *bgImage = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgCellNormal.png"]];
    cell.backgroundView = bgImage;
     bgImage release];
    [...]
    return cell;
}

答案 3 :(得分:0)

您可以使用nib文件通过继承UITableView Cell类来设置单元格的背景图像。

其他您可以通过

删除自动释放的对象
 UIImageView *imageView = [UIImageView alloc] initWithImage:[UIImage imageNamed:@"bgCellNormal.png"];
 cell. backgroundView = imageView;
 [imageView release];