[英]UITableView with images not releasing resources
我有一个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;
}
这段代码的问题是,即使我返回到先前显示的图像,当我滚动浏览表格时,内存使用也会一直增加。 滚动少许后,应用程序崩溃,可能是由于过度使用内存而被跳板踢了。
我想念什么吗? 当图像不可见时,如何强制释放其资源?
您会在子视图每次请求一个单元时都向该单元添加子视图,但是您绝不会删除它们。 您需要先删除旧的子视图。 正如您的代码所示,每次重新显示一个单元格时,它将在其上放置另一个UIImageView。
就个人而言,我建议使用UIImageView作为属性制作一个UITableViewCell子类,然后调用[cell setImageView:]
。 如果那行不通,请确保在添加新子视图之前先删除旧的子视图。
不知道导致此问题的确切原因,但是您是否需要实现一种方法,当单元格超出范围时会触发该方法? 在这里,也许您可以释放subview / image / etc?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.