我有一个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;
}
这段代码的问题在于,当我滚动到表格时,内存使用总是会增加,即使我回到之前显示的图像。滚动一点后,应用程序崩溃,可能是由于过度使用内存而跳板跳过。
我错过了什么吗?如何在不可见的情况下强制图像释放资源?
答案 0 :(得分:4)
您每次请求单元格时都会向单元格添加子视图,但您永远不会删除它们。您需要先删除旧的子视图。正如你的代码所代表的那样,每次重新显示一个单元格时,它都会将另一个UIImageView分层放到它上面。
就个人而言,我建议使用UIImageView作为属性创建一个UITableViewCell子类,然后调用[cell setImageView:]
。如果这不起作用,请确保在添加新子视图之前删除旧的子视图。
答案 1 :(得分:0)
不知道这个问题的确切原因但是有一种方法需要实现,当一个单元格超出范围时会被触发吗?在这里也许您可以发布子视图/图像/等?