2

我有一个view,我在其中拖了一个UITableView,还有 2 个UIImageView(第一个显示背景图像,第二个只是在视图顶部显示一个非常小的标题和图像)。它们都设置为weak属性。tableView 有 495 行,每个单元格中加载一个图像。这是配置单元格的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }    

    int cellNumber = indexPath.row + 1;
    NSString *cellImage1 = [NSString stringWithFormat:@"c%i.png", cellNumber];
    UIImage *theImage = [UIImage imageNamed:cellImage1];

    [cell.imageView setImage:theImage];


    UIView *bgColorView = [[UIView alloc] init];
    [bgColorView setBackgroundColor:[UIColor brownColor]];
    [cell setSelectedBackgroundView:bgColorView];

    return cell;
}

我使用segues,所以我不需要委托方法。(这也与这个问题无关)。问题是,滚动很流畅;但是,如果我滚动得太快,它就会变慢并可能导致应用程序崩溃。加载到单元格中的 png 图像尺寸不大,每个大约 5KB。似乎出队工作没有有效地完成;因为它变慢,显示内存警告消息,然后发生崩溃。我能做些什么吗?(视图中没有其他内容)

更新:我也试过删除这部分代码:

UIView *bgColorView = [[UIView alloc] init];
[bgColorView setBackgroundColor:[UIColor brownColor]];
[cell setSelectedBackgroundView:bgColorView];

没用!

4

2 回答 2

4

UIImage imageNamed缓存您的图像并且永远不会释放内存,这可能是您的内存警告和崩溃的原因。在处理大量图像时,通常最好以其他方式加载图像,例如imageWithContentsOfFileimageWithData

于 2012-07-08T05:41:51.020 回答
0

setImage尝试在命令后释放图像。这有帮助吗?

于 2012-07-08T05:44:39.813 回答