我正在改变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
答案 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];