UITableView图像不释放资源

时间:2009-10-12 16:46:47

标签: iphone iphone-sdk-3.0

我有一个UITableView,其中每个单元格都是一个图像。一次只能看到一个单元格。 图像按需加载。用户滚动到单元格并加载其图像。

这是我的cellForRowAtIndexPath方法:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *MyIdentifier = @"MyIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil) {
    // this is being compiled for OS 2.0, this is why I am using initWithFrame… it is working fine on 3.0 iPhone.
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectMake(0, 0, 480, 320) reuseIdentifier:MyIdentifier] autorelease];
}

UIImage *imagemX;
UIImageView *myView;

imagemX = [[[UIImage alloc]initWithContentsOfFile:[[NSBundle mainBundle] 
pathForResource:[NSString stringWithFormat: @"img%d", (indexPath.row+1)] ofType:@"jpg"]] autorelease];

myView = [[[UIImageView alloc]initWithImage:imagemX] autorelease];

[cell addSubview: myView];

return cell;
}

这段代码的问题在于,当我滚动到表格时,内存使用总是会增加,即使我回到之前显示的图像。滚动一点后,应用程序崩溃,可能是由于过度使用内存而跳板跳过。

我错过了什么吗?如何在不可见的情况下强制图像释放资源?

2 个答案:

答案 0 :(得分:4)

您每次请求单元格时都会向单元格添加子视图,但您永远不会删除它们。您需要先删除旧的子视图。正如你的代码所代表的那样,每次重新显示一个单元格时,它都会将另一个UIImageView分层放到它上面。

就个人而言,我建议使用UIImageView作为属性创建一个UITableViewCell子类,然后调用[cell setImageView:]。如果这不起作用,请确保在添加新子视图之前删除旧的子视图。

答案 1 :(得分:0)

不知道这个问题的确切原因但是有一种方法需要实现,当一个单元格超出范围时会被触发吗?在这里也许您可以发布子视图/图像/等?